【发布时间】:2013-11-27 13:12:20
【问题描述】:
我正在寻求一些淘汰建议。这个问题我已经发帖了,但是我的理解发生了变化,所以我重新发布。
我有以下代码:
function updateViewModel() {
if (typeof groupId == 'undefined') {
groupId = getDefaultGroupId();
}
$.getJSON("api/livestatusgroup/children/" + groupId)
.done(function (data) {
ko.mapping.fromJS(data, liveStatusViewModel.groups);
groupsLoaded();
});
$.getJSON("api/livestatusgroup/resources/" + groupId)
.done(function(data) {
ko.mapping.fromJS(data, liveStatusViewModel.resources);
resourcesLoaded();
});
this.resourceImagePath = ko.computed(function () {
return "../Image/" + this.resourceID();
}, this);
}
function ViewModel() {
var self = this;
self.resources = ko.mapping.fromJS([]);
self.groups = ko.mapping.fromJS([]);
}
如您所见,我正在使用 JSON 加载我的视图模型,但我在使用 resourceID() 方法时遇到了问题。我不确定如何编写将 this.resourceID() 替换为资源 ID(例如 ../Image/1)的方法。我试过使用这样的计算观察者:
liveStatusViewModel.resources.resourceID() = ko.computed(function() {
return this.ResID;
}, liveStatusViewModel);
...但这没有用。谁能帮我吗?我浏览了整个互联网,包括 Stack Overflow,但没有运气。这是一个真正的绊脚石!
进一步的工作
我刚刚尝试更改将 /Image/xx 附加到图像 src 的方式,如下所示:
function resourceImagePath(resourceId) {
return "/Images/" + resourceId;
}
使用以下 HTML 标记
<div class="icon" id="resourceIcon" runat="server"><img data-bind="attr: { src: resourceImagePath(ResourceId) }" alt=""/></div>
这不起作用。烦人的是,上面的resourceImagePath函数改写成这样:
function resourceImagePath(resourceId) {
return "/Images/1";
}
使用硬编码的图像 ID 进行测试,绝对可以正常工作。
理想情况下,我想知道如何使 JSON 中的资源 ID 可观察。
有人有其他想法吗?
谢谢,马克
【问题讨论】:
-
我在您之前的问题中问过,并且会再次问:您能否向我们展示完整的模型代码,包含 ResID,以及您调用
updateViewModel()的代码。顺便说一句,如果你的resourceID()是在 liveStatusViewModel 中声明的,为什么你希望它可以通过updateViewModel函数作为 this.resourceID() 访问? -
我没有模型的代码,它是使用 JSON 填充的。我从 $(document).ready 函数调用 updateViewModel()。
标签: c# knockout.js