是否可以在不更改上下文的情况下使用 foreach 绑定?
例如,这是我的模板:
<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>
所以我在foreach循环内部和外部使用模板'userAvatar'。现在我想在用户点击头像时执行一些操作。例如,我的模型是
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”操作,我必须在模板位于 foreach 之外时使用 $parent.openProfile,而在模板位于其中时使用 $parents[1].openProfile。
我可以将 openProfile 的链接复制到每个用户对象,或者在调用模板绑定时指定 openProfile 方法的位置,但是有更自然的解决方案吗?
PS 而且我不能使用 $root 变量,因为在现实世界中,我的 $root 位于这些模型的 10 层之上。