无法使数据在窗口小部件内部可绑定

时间:2014-08-23 20:31:31

标签: durandal durandal-2.0

一旦我改变输入值,我的主模型($ data.name)就不会更新。

提前致谢

一些观点

<td data-bind="editableLabel: { name: $data.name }"></td>

小部件的视图

<span data-bind="text: settings.name, click: edit, visible: !settings.inEditMode"></span>
<div class="input-group" data-bind="visible: settings.inEditMode">
    <input class="form-control" data-bind="value: settings.name" />
    <span class="input-group-btn">
        <button class="btn btn-success" type="button" data-bind="click: save"><span class="glyphicon glyphicon-ok"></span></button>
        <button class="btn btn-danger" type="button" data-bind="click: reset"><span class="glyphicon glyphicon-remove"></span></button>
    </span>
</div>

widget的viewmodel

define(['context/context'], function (context) {
    var ctor = function () { };


    ctor.prototype.activate = function (settings) {
        this.settings = settings;
        this.settings.inEditMode = false;
    };


    ctor.prototype.edit = function () {
        this.settings.inEditMode = true;
    };


    ctor.prototype.save = function () {
        this.settings.inEditMode = false;
        context.save();
    };


    ctor.prototype.reset = function () {
        this.settings.inEditMode = false;
    };


    return ctor;
});

1 个答案:

答案 0 :(得分:0)

在以下代码行中,您将对当前VM(name属性)的属性的引用传递给窗口小部件:

<td data-bind="editableLabel: { name: $data.name }"></td>

我怀疑您传递给窗口小部件的属性name不是可观察的。如果它不是,那么您只是将引用传递给只包含一个值的属性,因此如果它被更新,它将不会触发任何更改事件。