Knockout js观察全局变量



我正在设置一个变量

var extQty;

然后用户输入一些数据并提交,我返回一个带有extQty的json字符串。成功后,我正在更新变量:

    success: function (result) {
         window.extQty = result.extQty;
     }

如果extQty超过网格的行数,我需要隐藏按钮。我该怎么做呢?我试了下面的,但它没有看到变量的变化,因为这已经加载之前extQty得到更新。

 <!-- ko if: pagedList().length < extQty -->

如果我将上面的extQty改为3,它可以工作…

将变量设置为ko.observable,并使其成为视图模型的一部分。

function viewModel() {
    this.extQty = ko.observable(0);
    this.pagedList = ko.observableArray();
    //....
}
var myViewModel = new viewModel(); 
ko.applyBindings(myViewModel);

然后在您的AJAX success:

success: function (result) {
     myViewModel.extQty(result.extQty);
}

尝试更新您的小提琴:-

Your Fiddle Updated

<div data-bind="style: { display: (pagedList().length < extQty()) ? 'block' : 'none' }">
    <p class="pull-right">
        <a class="btn btn-primary" data-bind="click: $root.add" href="#" title="edit"><i class="icon-plus"></i>Add Extension</a>
    </p>
</div>

如果我错了请纠正我,当你使用if绑定时,它允许标记根据真或假的条件从你的文档中出现或消失。当条件为false时,在html中看到的代码中,元素将被注释掉。除非刷新页面,否则无法更改。所以,使用可见绑定,标记留在dom中,你可以使用可见绑定来隐藏或显示它…

看看Knockout If Binding文档