我正在尝试创建一个简单的viewmodel来显示具有Knockback的对象列表。 View Model非常简单,如下所示:
var objectives_collection = new ObjectiveCollection();
objectives_collection.fetch();
var view_model = kb.ViewModel.extend({
objectives: kb.CollectionObservable(objectives_collection),
constructor: function() {
_this = this;
kb.ViewModel.prototype.constructor.call(this, model = new Objective(), {});
console.log(this.objectives);
return this;
},
addObjective : function() {
var objective_model = new Objective({name: "New Objective", descriptor: 'Add description here'});
this.objectives.add(objective_model);
objective_model.save();
console.log(objectives);
},
edit: function() {
console.log('Edit');
},
remove: function(objective) {
self.objectives.remove(objective);
}
});
现在,视图模型的第一行(kb.CollectionObservable(goals_collection))给了我悲伤。它正在调用Underscore.js的绑定函数并尝试设置onCollectionChange侦听器,但是这里的Knockback行尝试绑定未定义的函数:
this.__kb._onCollectionChange = _.bind(this._onCollectionChange, this);
其中this._onCollectionChange显然未定义。我不确定该怎么做;我在这做错了什么?
答案 0 :(得分:1)
Knockback.js中有两个用于创建CollectionObservable的函数。
一个函数是名为 kb.CollectionObservable 的构造函数,另一个函数是名为 kb.collectionObservable 的工厂方法。注意区分大小写的区别?
使用构造函数时,将其称为:
var myCollection = new kb.CollectionObservable(...);
使用工厂,您正在调用一个为您使用new关键字的方法。所以你要输入:
var myCollection = kb.collectionObservable(...);
希望能够解决它。