我正试图在网页中首次实现knockoutjs。我偶然发现了以下问题,但也许这也是“最佳实践”的一个案例。
我有产品页面,产品可以有产品图片。如果没有可用的产品图片,则该属性设置为null,我需要显示“无图像可用”图片。
我的模特:
function ProductOverview() {
var self = this;
self.guid = ko.observable();
self.Image = ko.observable();
self.IsActive = ko.observable(false);
}
我的观点模型:
function productOverviewModelView() {
var self = this;
self.productOverview = new ProductOverview();
self.ShowNoImage = ko.computed(function () {
if (self.productOverview.Image() === null || self.productOverview.Image() === "") {
return true;
} else {
return false;
}
}, this);
self.ImageAvailable = ko.computed(function () {
if (self.productOverview.Image() === null || self.productOverview.Image === "") {
return false;
} else {
return true;
}
}, this);
//whenever the device is changed call this function
self.selectedProduct.subscribe(function () {
if (self.selectedProduct === "") {
self.productOverview = null;
} else {
$.ajax({
type: "POST",
url: "productoverview.aspx/getdevice",
data: "{'guid':'" + self.selectedProduct() + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
var product = JSON.parse(unescape(data.d));
self.productOverview.guid(product.guid);
self.productOverview.Image(product.Image);
self.productOverview.IsActive(product.IsActive);
}
});
}
});
}
我的观点:
<div style="display:inline-block;">
<img alt="" src="#" data-bind="attr: { src: productOverview.Image }" />
<img alt="" src="../../images/no-image-available.jpg" data-bind="visible:ShowNoImage" />
</div>
它有效,但是这样不起作用:
<img alt="" src="../../images/no-image-available.jpg" data-bind="visible: productOverview.Image != ''" />
是否有更短的方法,而不是制作计算出的可观测量?
我还希望在产品处于活动状态时显示活动图像:
<img src="../../images/active_icon.gif" data-bind="visible: productOverview.isActive" />
但是这张图片没有显示,为什么?
反过来说,我还可以像这样显示非活动图像吗?
<img src="../../images/notactive_icon.gif" data-bind="visible: !productOverview.isActive" />
答案 0 :(得分:5)
我已经找到了一个关于你的问题的jsFiddle示例:http://jsfiddle.net/XAXKZ/5
你犯了一些错误:
data-bind="visible: !IsActive()"
data-bind="visible:productOverview.Image() == '' || productOverview.Image() == null"
答案 1 :(得分:0)
您应该像这样调用observable:
<img src="../../images/notactive_icon.gif" data-bind="visible: productOverview.isActive() " />
这是因为isActive是一个函数所以它永远不会为空