javascript - 将 Knockout 与重复的用户控件一起使用

标签 javascript user-controls knockout.js

我有一个包含游戏列表的网页。每个游戏都由一个用户控件呈现,其中包含一些保存游戏属性(时间、分数、玩家等)的标签。因此,相同的用户控件会在页面上重复几次。 数据每分钟都会变化,以支持游戏的实时同步。 我希望使用 knockout 来更新用户控件中的所有标签,但是由于每个用户控件都应该绑定(bind)到不同的游戏数据,并且用户控件不能拥有自己的 View 模型,所以我不知道这种情况的最佳方法是什么。 我需要诸如动态 ViewModel 和动态数据绑定(bind)属性之类的东西,但我找不到有关该主题的任何信息。

最佳答案

这是 template binding 的演示在同一模板中同时使用 dataforeach。您可以在 JS 中看到数据是类型,一个 game,但我们在 HTML 中单独显示它们。

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 绑定(bind)会直接选择最喜欢的游戏。 Knockout 将当前上下文作为函数绑定(bind)的第一个参数传递,并且由于可观察量是函数,因此这会直接更新可观察量,而不需要包装函数。

您可以在 this fiddle 中查看此内容。它并不完全清楚你在哪里,你的问题中没有任何代码。我希望这不会太遥远。

关于javascript - 将 Knockout 与重复的用户控件一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15475287/

相关文章:

javascript - 根据访问者访问的国家/地区动态显示横幅

c# - 从其父页面调用 UserControl 方法

javascript - 带有 KnockoutJS 的 JQuery 数据表

knockout.js - ViewModel 更新后 Knockout 不更新 UI

javascript - 如何在第二页的radiobutton中传递button的值

javascript - Fetch 无法识别 102(或任何 1xx)状态代码

javascript - 如何遍历 html 元素并使用 javascript/jQuery 获取组合时间?

xaml - Xamarin 可重复使用的 xaml 用户控件和自定义命令

wpf - 在代码隐藏(WPF)中使用附加属性进行控制

knockout.js - 从 child 的根上触发方法时的上下文