如何更新计算的observable的值

时间:2015-03-26 15:01:23

标签: knockout.js

我在视图模型中有这个:

self.selectedItem = ko.observable();

    self.fullName = ko.computed(function () {
        var selectedItem = ko.unwrap(self.selectedItem);
        if (selectedItem) {
            return ko.unwrap(selectedItem.FullName);
        }
    });

self.editStatus = function(item) {
        self.selectedItem = item;
        if (self.selectedItem === null) {
            alert("No items selected");
        }
        $('#editStatus').modal('show');

    }

然后我有一个表格,其中包含一个链接:

<td data-bind="if: CanEditPostCloseStatus"><a data-bind="text: OrderPostCloseStatusName, click: $parent.editStatus"></a></td>

然后我有一个bootstrap模式,激活时应该显示fullName。

<div class="modal-body">
        <p data-bind="text: fullName" ></p>
</div>

问题是模态总是显示空的fullName。

当selectedItem发生更改以便显示fullName时,如何告诉Knockout更新绑定?

1 个答案:

答案 0 :(得分:1)

您的代码可以简化。首先让我们修复一个错误:self.selectedItem是一个可观察的,所以要更新它,我们需要像函数一样调用它。

self.editStatus = function(item) {
    self.selectedItem(item);  // fixed this assignment
    if (!self.selectedItem()) { // fixed reading this value
        alert("No items selected");
    }
    $('#editStatus').modal('show');

}

现在在模式中,我们可以使用淘汰赛with binding

<div data-bind="with: selectedItem" class="modal-body">
        <p data-bind="text: fullName" ></p>
</div>