你能在Kendo MVVM视图中编写纯JavaScript表达式吗(与Knockout一样)?

时间:2014-04-22 20:58:09

标签: javascript mvvm knockout.js kendo-ui

在下文中,isDirty返回一个布尔值,具体取决于用户是否更改了任何可观察属性。

HTML

<div class="status-message" data-bind="text:isDirty ? user.nickName : user.suffix>

JS

viewModel = new kendo.observable({
   user: {
   emailAddress: user.emailAddress,
   firstName: user.firstName,
   middleInitial: user.middleInitial,
   lastName: user.lastName,
   title: user.title,
   suffix: user.suffix,
   nickName: user.nickName
}
});

我已经使用Knockout完成了它,但出于某种原因,我无法使用Kendo的MVVM。

这仅仅是剑道的限制吗?

1 个答案:

答案 0 :(得分:1)

你不能在data-bind中使用JS,但还有其他方法可以实现你想要做的事情。 一种方法是创建两个状态消息div并在两者上使用visible绑定。 另一种方法是使用方法来显示数据。

HTML:

<div id="bindme">
    <!-- alternative #1 -->
    <input type="text" data-bind="value: user.emailAddress" />
    <div data-bind="visible: isDirty">
        <div class="status-message" data-bind="text: user.nickName"></div>
    </div>
    <div data-bind="invisible: isDirty">
        <div class="status-message" data-bind="text: user.suffix"></div>
    </div>

    <!-- alternative #2 -->
    <div class="status-message" data-bind="text: currentValue"></div>
</div>

JS:

viewModel = new kendo.observable({
    isDirty: false,
    user: {
        emailAddress: "a",
        firstName: "b",
        middleInitial: "c",
        lastName: "d",
        title: "e",
        suffix: "f",
        nickName: "g"
    },
    currentValue: function () {
        return this.get("isDirty") ? this.get("user.nickName") : this.get("user.suffix")
    }
});

viewModel.bind("change", function () {
    this.set("isDirty", true);
});

kendo.bind($("#bindme"), viewModel);

demo