是否可以在不改变上下文的情况下使用foreach绑定?在不改变上下文的情况下使用foreach绑定Knockout.js
例如,这里是我的模板:
<div data-bind="foreach:{data:users,as:'user'}">
<div data-bind="template:{name:'userAvatar',data:user}"></div>
</div>
<div data-bind="template:{name:'userAvatar',data:currentUser}"></div>
<script type="text/template" id="userAvatar">
<img data-bind="attr:{src:avatarUrl}">
</script>
于是我就用模板“userAvatar” foreach循环内部和外部的。现在我想在用户点击头像时执行一些操作。例如,我的模型是
var MyModel = function() {
this.users = [
{name:"user1",avatarUrl:"url1"},
{name:"user2",avatarUrl:"url2"}
];
this.currentUser = {name:"user3",avatarUrl:"url3"};
this.openProfile = function() {
// opening user profile
}
}
这种情况下,如果我想称之为“openProfile”模板动作我必须使用$ parent.openProfile当模板位于外的foreach和$家长[1] .openProfile,当它在里面。
我可以复制链接到openProfile到每个用户对象或指定openProfile方法的位置,当我调用模板绑定,但是有没有更自然的解决方案?
P.S.而且我不能使用$ root变量,因为在现实世界中,我的$ root根目录位于这些模型之上的10个级别。
这是一个例子,在这里我可以用$根,但在真实情况我有多个嵌套模型,所以我的$ root很远,它甚至不知道当前的模型及其方法。 – Kasheftin 2013-02-13 13:00:28
我知道这是一个黑客,但你可以在当前用户tempalte周围使用'with' ...'<! - ko with:currentUser - >
'然后你可以使用'$ parents [1] .openProfile '在这两种情况下。 – nemesv 2013-02-13 13:08:21