Javascript 敲除无法分析绑定
我正在阅读其他答案,但我找不到解决方案,错误显示: 错误:无法分析绑定。消息:ReferenceError:未定义AdvertisementLegs;绑定值:foreach:AdvertisementLegs,我找不到原因,因为它在模型中定义: 这是模型 Main Model.jsJavascript 敲除无法分析绑定,javascript,jquery,.net,knockout.js,Javascript,Jquery,.net,Knockout.js,我正在阅读其他答案,但我找不到解决方案,错误显示: 错误:无法分析绑定。消息:ReferenceError:未定义AdvertisementLegs;绑定值:foreach:AdvertisementLegs,我找不到原因,因为它在模型中定义: 这是模型 Main Model.js self.selectedAd = ko.observable(); self.selectAd = function (item, data) { self.selectedAd = ko
self.selectedAd = ko.observable();
self.selectAd = function (item, data) {
self.selectedAd = ko.observable(new AdvertisementMgr());
self.advertisementManager().getAdvertisementById(item);
$('#windowEditAd').jqxWindow('open');
};
var self = this;
//URLS
self.CompanyName = ko.observable("");
//Lists
self.AdvertisementLegs = ko.observableArray();
self.getAdvertisementById = function (dataItem) {
$.ajax({
cache: false,
url: mViewModel.apiUrl + 'Advertisement',
type: "GET",
contentType: "json",
dataType: "json",
data: {
adId : dataItem.AdvertisementId()
},
success: function (data) {
mViewModel.selectedAd(data);
},
error: function (xhr, status, error) {
alert(error.message);
}
});
};
广告模型.js
self.selectedAd = ko.observable();
self.selectAd = function (item, data) {
self.selectedAd = ko.observable(new AdvertisementMgr());
self.advertisementManager().getAdvertisementById(item);
$('#windowEditAd').jqxWindow('open');
};
var self = this;
//URLS
self.CompanyName = ko.observable("");
//Lists
self.AdvertisementLegs = ko.observableArray();
self.getAdvertisementById = function (dataItem) {
$.ajax({
cache: false,
url: mViewModel.apiUrl + 'Advertisement',
type: "GET",
contentType: "json",
dataType: "json",
data: {
adId : dataItem.AdvertisementId()
},
success: function (data) {
mViewModel.selectedAd(data);
},
error: function (xhr, status, error) {
alert(error.message);
}
});
};
json响应是:
CompanyName
"Flotsum Strategies, Inc"
AdvertisementLegs
[Object { AdvertisementLegId=6, Action="BUYER", Volume=1, más...}]
0
Object { AdvertisementLegId=6, Action="BUYER", Volume=1, más...}
AdvertisementLegId
6
Action
"BUYER"
Price
0
AdvertisementId
4
AdvertisementLegType
"TL"
公司名称
Flotsum战略公司
广告腿
[对象{AdvertisementLegId=6,Action=“买方”,卷=1,más..]
0
对象{AdvertisementLegId=6,Action=“买方”,卷=1,más..]
广告合法
6.
行动
“买方”
价格
0
广告ID
4.
广告legtype
“TL”
意见是:
<div data-bind="with: $root.selectedAd">
<span data-bind="text: CompanyName"></span>
<input data-bind="value: CompanyName" type="text" class="txt4 leg_data_vol1" style="width: 50px; text-align: center;" id="leg_data_vol1" />
<table border="0" cellspacing="0" cellpadding="0" class="volaxe-table">
<tbody data-bind="foreach: AdvertisementLegs ">
<tr >
<td>
lalla
<input data-bind="value: Volume" type="text" class="txt4 leg_data_vol1" style="width: 50px; text-align: center;" id="leg_data_vol1" />
</td>
</tr>
</tbody>
</table>
</div>
拉拉
CompanyName没有问题,问题在于它所说的数组
消息:ReferenceError:未定义AdvertisementLegs。
为什么它说如果它在模型中并且有结果,它就不能绑定它?这是因为当应用初始绑定时,
selectedAd
在创建为ko.observable()
时定义为null,并且在设置为new AdvertisementMgr()之前,它没有任何属性
在中选择ad
在尝试绑定到它的属性之前,应该检查selectedAd
是否不为null。您可以在整个
容器中添加一个knockoutif
,以确保它在呈现/绑定之前不为空
因此,只需使用
包装整个标记,该标记将打开selectedAd
,确保它不为null,并且在该元素不为null之前不会尝试渲染
<!-- ko if: $root.selectedAd() -->
<div data-bind="with: $root.selectedAd">
<span data-bind="text: CompanyName"></span>
<input data-bind="value: CompanyName" type="text" class="txt4 leg_data_vol1" style="width: 50px; text-align: center;" id="leg_data_vol1" />
<table border="0" cellspacing="0" cellpadding="0" class="volaxe-table">
<tbody data-bind="foreach: AdvertisementLegs ">
<tr >
<td>
lalla
<input data-bind="value: Volume" type="text" class="txt4 leg_data_vol1" style="width: 50px; text-align: center;" id="leg_data_vol1" />
</td>
</tr>
</tbody>
</table>
</div>
<!-- /ko -->
拉拉
这是不好的,因为在应用绑定并调用selectAd
后,您将用新的可观察引用覆盖可观察引用。你想要:
self.selectedAd(new AdvertisementMgr());// Or do you?
当然这不应该是:
self.selectedAd(new Advertisement()); // ?
我还注意到,在getAdvertisementById方法中,您可以执行以下操作:
mViewModel.selectedAd(data); // No bueno
self.selectAd函数启动并将selectedAd设置为新的AdvertisementMgr。然后你就可以得到广告。您进行了ajax调用,成功后,再次设置selectedAd,但您使用返回的原始数据对象进行设置
function Advertisement(data) { ... }
然后
在您的广告模型中,确保所有属性都设置为默认值,同时确保需要可观察的属性设置为可观察的。AdvertisementLeg是json中的一个对象,可能是这样,但我不知道如何将其广告化。您的视图模型在哪里?还有什么东西装订好了吗?