javascript - Knockout JS href attr 未在 .NET MVC4 部分页面上绑定(bind)

标签 javascript asp.net-mvc asp.net-mvc-4 knockout.js

我是中度 Knockout 用户,但这是我第一次在 MVC4 环境中使用它。所有常用绑定(bind)都正常工作,但我遇到了一个问题,即当我加载然后绑定(bind)局部 View 时,我的 href 属性绑定(bind)似乎没有触发。

这是我的部分 View 标记:

<div id="quick-panel">
    <a class="icon-set" data-bind="attr: { href: Contact.fullEditUrl() }" >&#x1F4DD;</a>
</div>

<div id="rightbarcontent">
....
</div>

<script>
ko.applyBindings(window.contact.viewmodel, document.getElementById("rightbarcontent"));
</script>

这是我定义 Contact.fullEditUrl() 的 View 模型片段:

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 后触发命名空间绑定(bind)。我在同一页面上的所有其他绑定(bind)(大约 20 个)都是正确的,但 href 从未为我的 anchor 标记设置,我不太确定为什么。我在各种站点和线程上仔细检查了我的语法,它似乎是正确的

最佳答案

你想要 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 中绑定(bind)的内容)?因为如果不是,那么 ko 将无法找到它。

我建议您将所有内容包装在另一个 div 中并绑定(bind)到它。

而且,如果您已经在主页上绑定(bind)了一些东西,那么它就包含在其中。然后再次应用绑定(bind)将失败。在这种情况下,我建议您执行以下两项操作之一:

1) 将它们合并到相同的绑定(bind)上下文中。 2) 确保您的主页绑定(bind)和您的部分绑定(bind)不重叠。重叠绑定(bind)将导致它们失败。

关于javascript - Knockout JS href attr 未在 .NET MVC4 部分页面上绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18622731/

相关文章:

javascript - 什么是显式 promise 构造反模式以及如何避免它?

asp.net - 对于 mvc 中 View 中的每个循环

c# - 用户登录成功后未通过身份验证

mysql - 如何使用 petapoco MVC4 创建联接

asp.net-mvc - MVC 4 Chrome 要求用户登录两次

javascript - 失去焦点时隐藏元素

javascript - Facebook init() 的 channelUrl 参数是否已弃用?

javascript - 使用 d3.js 和 Three.js 绘制轮廓图

asp.net-mvc - 测试 Asp.net MVC 应用程序的最佳实践

javascript - jquery Tab 仅在同一页面中本地引用脚本时有效