【问题标题】:fetch in backbone model with id获取具有 id 的骨干模型
【发布时间】:2012-01-13 13:38:50
【问题描述】:

我有一个项目列表,单击它们应该会显示用户详细信息(另一种视图)。 在我的路由器中,我有这样的路由:

'details/:id'   :   'details',

现在,在详细功能中,我应该获取我的对象(获取将触发新的视图渲染)。 但是我应该怎么做才能让主干将项目ID附加到model.url? 我现在有两种方法:

获取时动态创建 url:

this.realty_object.fetch({url: SITE_PATH + 'blah/blah/' + id});

还有这样的:

this.realty_object
    .set({id : id}, {silent: true})
    .fetch();

但我怀疑这是正确的解决方案。应该如何? model.urlRoot 和 model.url() 有什么区别。

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

    正确的答案是使用模型的 urlRoot 属性。如果已设置,则模型 ID 将在获取时附加到此 url。所以它可能看起来像这样(对象的名称与我的第一篇文章中的名称不同,但想法是相同的 - 通过 id 获取单个模型):

    Group = Backbone.Model.extend({
        urlRoot: SITE_PATH + 'group/index',
    });
    

    在路线中:

    this.group = new Group({id: id});
    this.group.fetch();
    

    【讨论】:

    • 这没关系,除非您想保持模型实例完整,但只需在空白和填充状态之间移动它(例如:登录/注销的用户)。在这种情况下,我能找到的最佳解决方案是 OP 的.set id 为silent:true
    • 您还应该将silent: true 传递给模型构造函数的选项哈希,以避免模型在获取时被标记为脏:this.group = new Group({id: id}, {silent: true});
    【解决方案2】:

    看这里, 它很好地解释了获取单个模型的更好解决方案之一

    您将使用一个函数来组合 url,作为模型属性。使用.isNew() 至少这就是我一段时间以来一直这样做的方式,我相信这比每次需要时都在 fetch 中构建一个 url 更好。

    How do I fetch a single model in Backbone?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 2012-05-04
      相关资源
      最近更新 更多