knockout js观察全局变量

时间:2013-03-22 00:04:09

标签: javascript jquery knockout.js

我正在设置变量

  

var extQty;

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

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

如果extQty超过网格的行数,我需要隐藏一个按钮。我怎样才能做到这一点?我尝试了以下但是没有看到变量更改,因为在extQty更新之前已经加载了它。

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

如果我在上面更改extQty说3它有效......

2 个答案:

答案 0 :(得分:4)

将变量设为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);
}

答案 1 :(得分:0)

尝试更新你的小提琴: -

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>

如果我错了,请纠正我,当您使用绑定时,它允许标记根据条件显示或消失,基于条件为真或假。当您的条件为false时,当您在html中看到时,该元素将被注释掉代码。除非您刷新页面,否则无法更改。因此,使用可见绑定,标记保留在dom中,您可以使用Visible绑定来隐藏它或显示它...

查看Knockout If Binding documentation