Коллекция Knockback Наблюдаемые выдает ошибку "Невозможно прочитать привязку свойства неопределенного"
Я пытаюсь сделать простую модель представления для отображения списка объектов с помощью Knockback. Модель представления довольно проста и выглядит следующим образом:
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(tasks_collection)) вызывает у меня горе. Он вызывает функцию связывания Underscore.js и пытается настроить прослушиватель onCollectionChange, но строка Knockback здесь пытается связать неопределенную функцию:
this.__kb._onCollectionChange = _.bind(this._onCollectionChange, this);
где this._onCollectionChange явно не определено. Я не совсем уверен, что с этим делать; что я тут не так делаю?
1 ответ
В Knockback.js есть две функции для создания CollectionObservable.
Одна функция - это конструктор с именем kb.CollectionObservable, другая - фабричный метод с именем kb.collectionObservable. Заметили разницу с учетом регистра?
Когда вы используете конструктор, вы вызываете его как:
var myCollection = new kb.CollectionObservable(...);
С фабрикой вы вызываете метод, который использует новое ключевое слово для вас. Так что вы бы набрали:
var myCollection = kb.collectionObservable(...);
Надеюсь, это прояснит.