【发布时间】:2018-05-21 08:10:52
【问题描述】:
HTML 代码。
<ul id="cat-list" data-bind="foreach: catList()">
<li data-bind="text: name, click: $parent.setCurrentCat"> </li>
</ul>
<div id="cat" data-bind="with: currentCat()">
<h2 data-bind="text: name" id="cat-name"></h2>
<div data-bind="text: clickCount" id="cat-count"></div>
<img src="" data-bind="click: $parent.incrementCount, attr: {src: imgSrc}" id="cat-img" alt="cute cat">
<h4>NickNames</h4>
<ul data-bind="foreach: nickNames">
<li data-bind="text: $data"></li>
</ul>
</div>
<script src="js/lib/knockout-3.2.0.js"></script>
<script src="js/app.js"></script>
JS代码:
var ViewModel = function() {
var self = this;
this.catList = ko.observableArray([]);
initialCats.forEach(function(catItem) {
self.catList.push( new Cat(catItem) );
});
this.currentCat = ko.observable( this.catList()[0]);
this.incrementCount = function(){
self.currentCat().clickCount(self.currentCat().clickCount()+1);
};
this.setCurrentCat = function(cat) {
self.currentCat = ko.observable(cat);
console.log(self.currentCat);
}
var Cat = function(data) {
this.clickCount = ko.observable(data.clickCount);
this.name = ko.observable(data.name);
this.imgSrc = ko.observable(data.imgSrc);
this.imgAttribution = ko.observable(data.imgAttribution);
this.nickNames = ko.observable(data.nickNames);
}
ko.applyBindings(new ViewModel())
ViewModel 中的 initialCats 是一个包含所有猫信息的数组。 catlist 的一个示例元素是
{
clickCount: 0,
name: 'Tabby',
imgSrc: 'tabby.jpg',
imgAttribution: 'Aman',
nickNames: ['Tabtab', 'T-bone', 'Mr. T', 'Tabitha Tab Tabby']
}
虽然点击 li 元素会改变当前的猫,但不会渲染相应的视图。而默认的猫(第一只猫)只在渲染中。我错过了什么。 ?
【问题讨论】:
标签: javascript knockout.js data-binding