我遇到了显示所有视图的问题。 (没有js错误) 无论如何,当我去产品或家里时,两个视图都显示出来,我不明白为什么。是不是ko:应该限制一个或另一个视图? 我错过了什么?
Index.cshtml
@section SPAViews {
@Html.Partial("_Home")
@Html.Partial("_Products")
}
@section Scripts{
@Scripts.Render("~/bundles/knockout")
@Scripts.Render("~/bundles/app")
}
_Home.cshtml
<!-- ko with: home -->
...
<!-- /ko -->
_Products.cshtml
<!-- ko with: products -->
...
<!-- /ko -->
products.viewmodel.js
function ProductsViewModel(app, dataModel) {
var self = this;
self.query = ko.observable();
Sammy(function () {
this.get('#products', function () {
$.ajax({
method: 'get',
url: app.dataModel.productsUrl,
contentType: "application/json; charset=utf-8",
success: function (data) {
console.log(data);
self.query(data.query);
}
});
})
});
return self;
}
app.addViewModel({
name: "Products",
bindingMemberName: "products",
factory: ProductsViewModel
});
home.viewmodel.js
function HomeViewModel(app, dataModel) {
var self = this;
Sammy(function () {
this.get('#home', function () {
console.log('home');
});
this.get('/', function () { this.app.runRoute('get', '#home') });
});
return self;
}
app.addViewModel({
name: "Home",
bindingMemberName: "home",
factory: HomeViewModel
});
软件包:
bundles.Add(new ScriptBundle("~/bundles/app").Include(
"~/Scripts/sammy-{version}.js",
"~/Scripts/app/common.js",
"~/Scripts/app/app.datamodel.js",
"~/Scripts/app/app.viewmodel.js",
"~/Scripts/app/home.viewmodel.js",
"~/Scripts/app/products.viewmodel.js",
"~/Scripts/app/_run.js"));
答案 0 :(得分:0)
这可能是因为对with
约束的误解。 From the docs:
with绑定创建一个新的绑定上下文,以便后代元素绑定在指定对象的上下文中。
所以这只是切换上下文。它仍将显示两个部分。
你可能在the if
binding之后(和相应的ifnot
binding),记录如下:
if绑定导致标记的一部分出现在文档中(并且应用了数据绑定属性),仅当指定的表达式求值为true时...
您应该使用此if
绑定并将表达式更改为计算为布尔值的值。