Коллекция 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(...);

Надеюсь, это прояснит.

Другие вопросы по тегам