首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ampersand模型找不到它的url

Ampersand模型找不到它的url
EN

Stack Overflow用户
提问于 2015-11-26 19:51:54
回答 1查看 235关注 0票数 0

我在和Ampersand JS模特一起玩。当我试图初始化一个新的,

代码语言:javascript
复制
z.add(this.state)
m = z.get(this.state.name)
m.sync()

或者把一个添加到一个集合中,

代码语言:javascript
复制
m = new ZModel(this.state)
m.sync()

我得到一个错误A "url" property or function must be specified

根据规范:

默认情况下,url是通过嗅探模型的urlRoot或模型的集合url (如果存在)来构造的,如果模型尚未保存,则追加idAttribute。

这正是我想要的行为,因为我有一个restful来同步。设置了urlRoot,设置了idAttribute

代码语言:javascript
复制
export default Model.extend({

  idAttribute: 'name',

  urlRoot: 'http://localhost:50000/locator/zones/',

  props: {
    name: 'string',
    type: 'string',
  },

  fetch () {
    Model.prototype.fetch.apply(this, arguments)
  }
})

集合是定义的,但我没有将它传递给模型,因为我无法从文档中了解如何实现它。但据推测,只要我已经定义了urlRoot,它就没有必要了。在这里做什么?我想我可以将集合传递给模型,或者以编程方式定义url?

更新:

如果我这么做:

代码语言:javascript
复制
m.save({}, {
  success: function(model, response) {
    console.log('Rerender now')
  }.bind(this),
  error: function() {
    console.log('Error during model add')
  }
})

我不再有同样的问题了,但我没有得到一个帖子,我收到了两个选项的请求和抛出。如果省略空对象{}参数,则行为不会改变。尽管规范说:

book.save();//=>通过与{“标题”:“Rough Riders”、“作者”:"Theodore Roosevelt“}的符号同步触发POST

Book.save({作者:“泰迪”});//=>通过与{“标题”:“粗糙骑士”、“作者”:“泰迪”}同步的方式触发PUT

我想文档忽略了很多细节。让这件事成功的秘诀是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-07 15:06:45

感谢rick和来自Ampersand聊天的aaronmccall的回答:

默认情况下,如果填充了模型的ID属性,则保存方法将是PUTPOSTPUT/PATCH的区别在于模型在默认情况下是否具有ID。实际的逻辑来自ampersand-state中的ampersand-state函数。您可以重载此函数以确定您自己的逻辑,也可以在选项中手动传递您的首选方法。

在没有特殊ID的情况下,我喜欢将名为fetched的属性添加到派生ampersand-model的会话中。当我从服务器获取/检索模型时,我设置了这个值。我将它用于我的isNew值,并将它用作子视图的waitFor属性。

代码语言:javascript
复制
var Model = require('ampersand-model');

module.exports = Model.extend({
  constructor: function(){
    options || (options = {});
    Model.apply(this, arguments);
    this.onSync = this.onSync.bind(this);
    this.on('sync', this.onSync);
  },
  isNew: function(){
    return this.fetched;
  },
  session:{
    fetched: ['boolean', true, false],
  },
  onSync: function (model, resp, options) {
    if (options.xhr.method == "GET") {
      this.fetched = true;
    }
  }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33946087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档