這是我的第一篇文章,所以請很好;)我試圖創建一個Backbone + requireJS示例應用程序,我偶然發現了一個奇怪的問題。在我的視圖初始化函數中,我綁定到模型更改事件Backbone.js模型觸發器更改只有model.on再次調用
this.model.on("change", this.change());
當數據加載並且一切正常時,會正確觸發事件。在我看來,我也綁定到一個點擊事件。單擊我嘗試更改其中一個屬性,我希望發生更改事件,但它從未出現過。
我正在嘗試一些東西推薦這裏在stackoverflow(here,here, and there),但沒有運氣。
在我的內心裏,我覺得它與事件綁定有關。當我試圖再次綁定到更改事件模型內點擊回調它開始工作。所以現在我坐在這裏,我很困惑。有人能解釋這個問題嗎?
筆者認爲:
define(
[
'jquery',
'underscore',
'backbone',
'text!templates/news/newsListItem.html'
],
function($, _, Backbone, newsListItemTemplate)
{
var NewsListItemViewModel = Backbone.View.extend({
tagName: 'li',
events: {
"click a" : "onLinkClick"
},
initialize: function(){
this.model.on("change", this.changed());
},
render: function()
{
this.$el.html(_.template(newsListItemTemplate, this.model.toJSON()));
},
changed: function()
{
this.render();
console.log("changed");
},
//GUI functions
onLinkClick: function(e)
{
console.log("click!");
this.model.toggle();
this.model.on("change", this.changed());
}
});
var init = function(config){
return new NewsListItemViewModel(config);
}
return {
init : init
}
}
);
我的模型:
define(
['jquery', 'underscore', 'backbone'],
function($, _, Backbone){
var NewsListItemModel = Backbone.Model.extend({
toggle: function() {
this.set('done', !this.get('done'));
this.trigger('change', this);
}
});
var init = function(data)
{
return new NewsListItemModel(data);
}
return {
init: init,
getClass: NewsListItemModel
};
}
);
感謝任何輸入:)
感謝隊友,它的工作! onLinkClick下的代碼包含我的調試代碼,重新綁定只是一個檢查重新綁定是否工作的測試。我也一直在尋找[todos](http://backbonejs.org/docs/todos.html),並且它們在init中作爲休閒版本綁定在一起: this.listenTo(this.model,'change',this。渲染); 它是推薦的方式綁定到模型? – user3485150