2017-02-10 198 views
0

我有一些麻煩更新淘汰賽觀測值。我需要將linkClick的值傳遞給showMenu。更新淘汰賽觀察

當我手動更新showMenu像這樣showMenu(「值」),價值將被傳遞給視圖罰款。但它需要是一個動態值。這實際上就是我的代碼。

//View 
<a data-bind="click: linkClick" data-sec="Value">Click Me</a> 

<!-- ko if: showMenu() === 'Value' --> 
    <ul class="Menu"> 
     <li>Link 1</li> 
     <li>Link 2</li> 
    </ul> 
<!-- /ko --> 

define(
    [''], 
    function() { 
    var _this = this; 
    return { 

     showMenu: ko.observable(""), 
     linkClick: function(data, event) { 

      var element = event.target,      
       Menu = $(element).attr('data-sec'); 

      var myMenu = this.showMenu(); 
      this.showMenu(Menu); 

     } 
    } 
}); 

伊夫也在全球範圍內使用_this代替然而這產生一個_this.showMenu()不是函數錯誤嘗試。請幫忙。

PS。我必須在第一個函數定義中寫入所有內容。

+0

應該在哪裏進行showMenu(?)值將從何而來? – jtabuloc

+0

'this' in'var _this = this;'沒有指出任何東西(它實際上指向了我猜測的窗口對象)。如果你寫'var _this = {_here_the_litteral_definition_of_some_object_with_methods_}','_this.showMenu()'工作。另外,如果你正在定義一個包,通常會建議「exports」而不是_this作爲你定義的模塊的變量名。 – miellaby

回答

2

使用data(這是您的視圖模型),而不是this

function vm() { 
 
    return { 
 
    showMenu: ko.observable(""), 
 
    linkClick: function(data, event) { 
 
     var element = event.target, 
 
     Menu = $(element).attr('data-sec'); 
 

 
     // use data instead of this 
 
     data.showMenu(Menu); 
 
    } 
 
    } 
 
} 
 

 
ko.applyBindings(vm());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<a data-bind="click: linkClick" data-sec="Value">Click Me</a> 
 
<!-- ko if: showMenu() === 'Value' --> 
 
<ul class="Menu"> 
 
    <li>Link 1</li> 
 
    <li>Link 2</li> 
 
</ul> 
 
<!-- /ko -->

+0

完美的工作! –