2013-03-22 138 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