我是一个温和的Knockout用户,但这是我第一次在MVC4环境中使用它。所有常见的绑定都已正常工作,但我遇到的问题是,当我加载然后绑定局部视图时,我的href属性绑定似乎没有触发。
这是我的部分视图标记:
<div id="quick-panel">
<a class="icon-set" data-bind="attr: { href: Contact.fullEditUrl() }" >📝</a>
</div>
<div id="rightbarcontent">
....
</div>
<script>
ko.applyBindings(window.contact.viewmodel, document.getElementById("rightbarcontent"));
</script>
这是我的viewmodel片段,我定义了Contact.fullEditUrl():
window.contact.Contact = function (data) {
var contact = this;
this.id = ko.observable(data.id);
this.fullEditUrl = ko.computed(function() {
return "http://localhost:24191/contact/contactfulledit/" + data.id;
});
}
我在加载DOM后触发了命名空间绑定。我在同一页面上的所有其他绑定(大约20个)都是正确的,但href永远不会为我的锚标签设置,我不确定为什么。我已经在各种网站和线程上仔细检查了我的语法,这似乎是正确的
答案 0 :(得分:0)
你想要this.id()而不是data.id()
我也建议你做到
window.contact.Contact = function (data) {
var contact = this;
contact.id = ko.observable(data.id);
contact.fullEditUrl = ko.computed(function() {
return "http://localhost:24191/contact/contactfulledit/" + contact .id();
});
}
如果id永远不会改变(它看起来不像它,你根本不需要使用任何可观察的或计算的:
window.contact.Contact = function (data) {
var contact = this;
contact.id = data.id;
contact.fullEditUrl = "http://localhost:24191/contact/contactfulledit/" + contact.id
}
只有当您需要跟踪的某些内容发生变化时,您才需要使用observable。
就部分而言。部分包含在主上下文中(你绑定在ko.applyBindings中)?因为如果不是,那么ko将无法找到它。
我建议你将所有内容包装在另一个div中并与之绑定。
但是,如果你的主页上已有一些内容包含在内。然后再次应用绑定将失败。在这种情况下,我建议你做两件事之一:
1)将它们组合到相同的绑定上下文中。 2)确保主页和部分中的绑定不重叠。重叠绑定将导致它们失败。