2013-03-22 137 views
0

我设置一个变量淘汰赛JS观察全局变量

VAR extQty;

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

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

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

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

如果我改变extQty在上面说3它的工作原理...

+0

淘汰赛采用'ko.observable'的变量你想淘汰赛知道他们什么时候改变。这就是说,为什么你甚至使用全局变量而不是使其成为视图模型的可观察属性? – 2013-03-22 00:43:32

+0

页面的另一部分抓取json数据,它是一个单独的函数。有没有更好的方法来做到这一点? – Stephen 2013-03-22 00:45:34

+0

如果你有一个对你的视图模型的引用(使其成为全局的,或者至少把它们放在同一个闭包中),那么问题是什么?或者你甚至可以让函数抓取视图模型的json数据部分。 – 2013-03-22 00:48:25

回答

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); 
} 
+0

谢谢你的回答,我在jsfiddle上发布了我的代码,所以你可以看到,我仍然有一个问题 - 我的代码告诉我,extQty没有定义:http://jsfiddle.net/SghnU / – Stephen 2013-03-22 01:05:17

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,您可以与可视结合隐藏或显示它玩...

看一看Knockout If Binding documentation