A有模板:
<table data-bind="foreach: {data: messages, as: 'message'}">
<tr> <td data-bind="text: $root.go"></td> </tr>
</table>
我的js:
function CreateViewModel() {
var self = this;
this.go = ko.computed(function() {
return 'not really important what here for now';
});
}
ko.applyBindings( new MessagesVM );
运行时“go”中的上下文是“窗口”,我希望它是当前项。有可能吗?如果我将tmpl行更改为"<td data-bind="text: go"></td>
“,则没有定义错误'go‘。
发布于 2016-02-23 20:10:07
运行时“go”中的上下文是“窗口”,我希望它是当前项。有可能吗?
我不认为你能用电脑,不。如果您使它成为一个简单的函数,您可以:data-bind="text: $root.go.call(message)"
(一般说来,它将是.call($data)
,但因为您在foreach
中将它命名):
function MessagesVM() {
var self = this;
this.messages = ko.observableArray([
"Message 1",
"Message 2"
]);
this.go = function() {
return 'this is: "' + this + '"';
};
}
ko.applyBindings(new MessagesVM);
<table data-bind="foreach: {data: messages, as: 'message'}">
<tr>
<td data-bind="text: $root.go.call(message)"></td>
</tr>
</table>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min.js"></script>
或者,如果您希望使用计算的某些功能,但对单个项进行操作,我可能会使用绑定处理程序:
ko.bindingHandlers.specialText = {
update: function(element, valueAccessor) {
var value = ko.unwrap(valueAccessor());
element.innerHTML = "'value' is " + value;
}
};
function MessagesVM() {
var self = this;
this.messages = ko.observableArray([
"Message 1",
"Message 2"
]);
}
ko.applyBindings(new MessagesVM);
<table data-bind="foreach: {data: messages, as: 'message'}">
<tr>
<td data-bind="specialText: message"></td>
</tr>
</table>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min.js"></script>
发布于 2016-02-23 20:23:13
将其转换为函数并传递上下文。作为计算,它有一个缓存的值,因此不能依赖于上下文.
function CreateViewModel() {
var self = this;
this.messages = [
'one',
'two'
];
this.go = function(data) {
var context = data;
return 'Context:' + context;
};
}
ko.applyBindings(new CreateViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<table data-bind="foreach: {data: messages, as: 'message'}">
<tr>
<td data-bind="text: $root.go(message)"></td>
</tr>
</table>
https://stackoverflow.com/questions/35587127
复制相似问题