Получение доступа к данным в коллекции Backbone моделей Backbone через KnockbackJS
В последние несколько дней я играл с Knockout и Backbone и наткнулся на среду KnockbackJS, которая объединяет возможности связывания Knockout с магией моделирования данных Backbone.
В этом простом примере у меня есть коллекция Backbone моделей Backbone, и у меня возникают проблемы с привязкой их к моему HTML.
Это мой JavaScript:
var Model = Backbone.Model.extend({
defaults: {
firstName: "",
lastName: ""
}
});
var Collection = Backbone.Collection.extend({
data : Model
});
var temp1 = new Model({firstName: "aaa", lastName:"bbb"});
console.log("new model");
var temp2 = new Model({firstName: "BBB", lastName:"CCCC"});
console.log("newest model");
var collection = new Collection([temp1, temp2]);
//---------Knockout/Backbone bridge---------
var view_model = kb.viewModel(collection, { read_only: true });
ko.applyBindings(view_model);
... и мой простой HTML:
<div data-bind="foreach: data">
<span data-bind="text: name"></span>
<span data-bind="text: artist"></span>
</div>
Я не могу получить данные внутри модели в коллекции. Какие-нибудь подсказки, подсказки, советы?
1 ответ
Я понял, вот код JS:
console.clear();
var PersonModel = Backbone.Model.extend();
var model1 = new PersonModel({firstName: "aaa", lastName:"bbb"});
var model2 = new PersonModel({firstName: "CCCC", lastName:"DDDD"});
var PersonViewModel = function (person) {
this.firstName = kb.observable(person, 'firstName');
this.lastName = kb.observable(person, 'lastName');
this.fullName = ko.computed((function () {
return "" + (this.firstName()) + " " + (this.lastName());
}), this);
};
var PersonsModel = Backbone.Collection.extend({ model: PersonModel});
var personsModel = new PersonsModel([model1,model2]);
var PersonsViewModel = function (persons) {
this.persons = kb.collectionObservable(persons);
};
var personsViewModel = new PersonsViewModel(personsModel);
ko.applyBindings(personsViewModel, $('#kb_collection_observable')[0]);
... а вот и HTML:
<div id="kb_collection_observable">
<div data-bind="if: persons">
<span>Data </span>
</div>
<div data-bind="foreach: persons">
<p>First name: <input class='text' data-bind="value: firstName" /></p>
<p>Last name: <input class='input-small pull-right' data-bind="value: lastName" /></p>
</div>
</div>
Благодаря этому так посту