2017-02-10 3 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); 

     } 
    } 
}); 

Ive также пытались использовать _this в глобальном масштабе, вместо этого однако это производит _this.showMenu() не является функцией ошибки. Пожалуйста помоги.

PS. Я должен написать все внутри этого определения первой функции.

+0

Где следует значение для showMenu (?) Будет исходить от? – jtabuloc

+0

'this' в' var _this = this; 'ничего не указывает (ну, на самом деле, он указывает на объект окна, который я предполагаю). Если вы пишете 'var _this = {_here_the_litteral_definition_of_some_object_with_methods_}', '_this.showMenu()' работает. Кроме того, если вы определяете пакет, часто рекомендуется «экспортировать» вместо _this как имя переменной для определяемого вами модуля. – miellaby

ответ

2

использование data (который является вашей ViewModel) вместо 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

Это сработало отлично! –

Смежные вопросы