更新淘汰赛观察

问题描述:

我有一些麻烦更新淘汰赛观测值。我需要将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

使用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

完美的工作! –