我有一个包含游戏列表的网页。每个游戏都由一个用户控件呈现,其中包含一些保存游戏属性(时间、分数、玩家等)的标签。所以同一个用户控件在页面上重复了几次。数据每分钟都在变化,以支持游戏的实时共变。我希望使用淘汰赛来更新用户控件中的所有标签,但是由于每个用户控件都应该绑定到不同的游戏数据,并且用户控件不能拥有自己的视图模型,所以我不知道这种场景的最佳方法是什么. 我需要动态 ViewModel 和动态数据绑定属性之类的东西,但我找不到有关该主题的任何信息。
问问题
1126 次
1 回答
1
这是一个使用相同模板的模板绑定的演示。您可以在 JS 中看到数据是类型 a ,但我们在 HTML 中分别显示它们。data
foreach
game
HTML
<!-- ko if: favoriteGame -->
<h1>Favorite Game</h1>
<div data-bind="template: { name: 'gameTemplate', data: favoriteGame }"></div>
<!-- /ko -->
<h1>All Games</h1>
<div data-bind="template: { name: 'gameTemplate', foreach: games }"></div>
<script type="text/ko" id="gameTemplate">
<div>
<span class="gameName" data-bind="text: name"></span>
<span data-bind="text: publisher"></span>
<input data-bind="value: score" />
<button data-bind="click: $parent.favoriteGame">Favorite</button>
</div>
</script>
Javascript
var Game = function(data) {
this.name = ko.observable(data.name || "");
this.publisher = ko.observable(data.publisher || "");
this.score = ko.observable(data.score || 0);
};
var ViewModel = function(init) {
var self = this;
self.favoriteGame = ko.observable();
self.games = ko.observableArray(ko.utils.arrayMap(init, function(g) {
return new Game(g);
}));
};
注意click: $parent.favoriteGame
绑定直接选择喜欢的游戏。Knockout 将当前上下文作为第一个参数传递给函数绑定,并且由于 observable 是函数,因此这会直接更新 observable,而不需要包装函数。
你可以在这个小提琴中看看这个。它并不完全清楚你之后的位置,你的问题中没有任何代码。我希望这不会太远。
于 2013-04-03T15:53:43.630 回答