Backbone.js的 - 取方法不会触发复位事件(Backbone.js - fetch met

2019-08-22 02:48发布

我与Backbone.js的开始,并试图建立我的第一个示例应用程序 - 购物清单。

我的问题是,当我取物品的收集,复位事件是不是可能解雇,所以我的渲染方法没有被调用。

模型:

Item = Backbone.Model.extend({
  urlRoot : '/api/items',
  defaults : {
    id : null,
    title : null,
    quantity : 0,
    quantityType : null,
    enabled : true
  }
});

采集:

ShoppingList = Backbone.Collection.extend({
  model : Item,
  url : '/api/items'
});

列表显示:

ShoppingListView = Backbone.View.extend({

el : jQuery('#shopping-list'),

initialize : function () {
    this.listenTo(this.model, 'reset', this.render);
},

render : function (event) {
    // console.log('THIS IS NEVER EXECUTED');
    var self = this;
    _.each(this.model.models, function (item) {
        var itemView = new ShoppingListItemView({
            model : item
        });
        jQuery(self.el).append(itemView.render().el);
    });
    return this;
}

});

列表项的看法:

ShoppingListItemView = Backbone.View.extend({

tagName : 'li',

template : _.template(jQuery('#shopping-list-item').html()), // set template for item

render : function (event) {
    jQuery(this.el).html(this.template(this.model.toJSON()));
    return this;
}

});

路由器:

var AppRouter = Backbone.Router.extend({

routes : {
    '' : 'show'
},

show : function () {
    this.shoppingList = new ShoppingList();
    this.shoppingListView = new ShoppingListView({
        model : this.shoppingList
    });
    this.shoppingList.fetch(); // fetch collection from server
}

});

应用启动:

var app = new AppRouter();
Backbone.history.start();

页面加载后,物品的收集正确地从服务器获取,但渲染ShoppingListView的方法不会被调用。 我做错了吗?

Answer 1:

这是你的问题:

“当模型数据从服务器返回时,它使用设置为(智能)合并获取的车型,除非你通过{复位:真正}” 骨干文档

所以,你想火与复位选项获取:

this.shoppingList.fetch({reset:true}); // fetch collection from server

顺便说一句,你可以定义视图上集合属性 :

this.shoppingList = new ShoppingList();
  this.shoppingListView = new ShoppingListView({
     collection : this.shoppingList  // instead of model: this.shoppingList
  });


Answer 2:

您使用的骨干1.0吗? 如果不是,忽略这一点,否则,你可能会发现医生说怎么样收集#获取方法有趣。

引述的changelog:

重命名集合的‘更新’设置,用于与同类model.set(),并与复位对比的并行性。这是现在后默认的更新机制获取。如果您想继续使用‘复位’,通过{重置:真正}“

因此,基本上,你不是做一个reset这里,但一个update ,因此没有reset事件。



文章来源: Backbone.js - fetch method does not fire reset event