C# 在敲除中使用JSON时计算的可观察值
我在寻求一些令人震惊的建议。我已经发布了这个问题,但我的理解已经改变,所以我重新发布 我有以下代码:C# 在敲除中使用JSON时计算的可观察值,c#,knockout.js,C#,Knockout.js,我在寻求一些令人震惊的建议。我已经发布了这个问题,但我的理解已经改变,所以我重新发布 我有以下代码: function updateViewModel() { if (typeof groupId == 'undefined') { groupId = getDefaultGroupId(); } $.getJSON("api/livestatusgroup/children/" + groupId) .done(function (da
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);
function resourceImagePath(resourceId) {
return "/Images/" + resourceId;
}
function resourceImagePath(resourceId) {
return "/Images/1";
}
…但那没用。有人能帮我吗?我已经浏览了整个互联网,包括堆栈溢出,但没有运气。这真是个绊脚石
进一步工作
我刚刚尝试更改将/Image/xx附加到Image src的方式,如下所示:
liveStatusViewModel.resources.resourceID() = ko.computed(function() {
return this.ResID;
}, liveStatusViewModel);
function resourceImagePath(resourceId) {
return "/Images/" + resourceId;
}
function resourceImagePath(resourceId) {
return "/Images/1";
}
使用以下HTML标记
<div class="icon" id="resourceIcon" runat="server"><img data-bind="attr: { src: resourceImagePath(ResourceId) }" alt=""/></div>
使用硬编码的图像id进行测试,效果绝对良好
理想情况下,我想知道如何使JSON中的资源ID可见
有人有其他想法吗
谢谢,Mark我认为您的结构不正确,因为计算出的函数“resourceImagePath”应该是单个资源的定义 我意识到你可能想使用这个映射插件,但根据我的经验,我发现当我手动映射时,我有更多的灵活性。这并不有趣,但你只要做一次就可以继续前进 以下是我将如何处理这个问题。我根本没有测试过
创建Javascript对象的新实例(即“资源”、“组”)
//全局变量
var-groupId;
//定义视图模型
var resource=函数(resourceID){
var self=这个;
self.resourceID()=ko.observable(resourceID);
self.resourceMagePath=ko.computed(函数(){
返回“./Image/”+self.resourceID();
},自我);
}
//定义组
var group=函数(groupId){
var self=这个;
self.groupID()=ko.observable(groupID);
}
var viewModel=函数(){
var self=这个;
self.resources=ko.observearray([]);
self.groups=ko.observearray([]);
self.Initialize=函数(){
if(typeof groupId==“未定义”){
groupId=getDefaultGroupId();
}
$.getJSON(“api/livestatusgroup/children/”+groupId)
.完成(功能(数据){
对于(变量i=0,j=data.length;i
乍一看,我发现了几个潜在的问题
<img data-bind="attr: { src: resourceImagePath(ResourceId) }" />
在这里,您在resourceID上添加了paranthesis,它尝试解析函数,同时也尝试在表达式的右侧赋值。这不是有效的JavaScript。删除括号后,它应该可以工作
liveStatusViewModel.resources.resourceID = ko.computed(function() {
return this.ResID;
}, liveStatusViewModel);
至于你文章的其余部分,我不太明白你想做什么,所以这是我能给出的最好答案。我不确定是否要将resourceID分配给liveStatusViewModel.resources上的每个资源,或者是否要添加一个在liveStatusViewModel.resources对象上计算的资源。如果你澄清,我将能够进一步回答 我在你之前的问题中问过,并且会再次问:你能给我们看一下模型的完整代码,包含ResID,以及你调用
updateViewModel()
的代码吗。顺便问一下,如果您的resourceID()
是在liveStatusViewModel中声明的,为什么您希望它可以像这样访问updateViewModel
函数中的.resourceID()?我没有模型的代码,它是使用JSON填充的。我从$(document).ready函数调用updateViewModel()。
liveStatusViewModel.resources.resourceID = ko.computed(function() {
return this.ResID;
}, liveStatusViewModel);