更新淘汰赛观察
问题描述:
我有一些麻烦更新淘汰赛观测值。我需要将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。我必须在第一个函数定义中写入所有内容。
答
使用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
完美的工作! –
应该在哪里进行showMenu(?)值将从何而来? – jtabuloc
'this' in'var _this = this;'没有指出任何东西(它实际上指向了我猜测的窗口对象)。如果你写'var _this = {_here_the_litteral_definition_of_some_object_with_methods_}','_this.showMenu()'工作。另外,如果你正在定义一个包,通常会建议“exports”而不是_this作为你定义的模块的变量名。 – miellaby