Javascript 在MVC4视图中使用敲除JS的两个ViewModels绑定
我正在使用KnockoutJS3.3.0。在我的应用程序中,我有一个通用的javascript文件,它在整个应用程序中都被引用。除此之外,我将为每个页面提供单独的Js文件 所以我有两个视图模型,一个是通用的,另一个是页面级视图模型页面级视图模型。我的两个Js文件的所有功能都是ajax 我需要把它们绑在视线中 这是我的通用视图模型Javascript 在MVC4视图中使用敲除JS的两个ViewModels绑定,javascript,ajax,asp.net-mvc-4,knockout.js,Javascript,Ajax,Asp.net Mvc 4,Knockout.js,我正在使用KnockoutJS3.3.0。在我的应用程序中,我有一个通用的javascript文件,它在整个应用程序中都被引用。除此之外,我将为每个页面提供单独的Js文件 所以我有两个视图模型,一个是通用的,另一个是页面级视图模型页面级视图模型。我的两个Js文件的所有功能都是ajax 我需要把它们绑在视线中 这是我的通用视图模型 var App = function () { var self = {}; self.FP = ko.observable($("#fpTag").
var App = function () {
var self = {};
self.FP = ko.observable($("#fpTag").val());
self.UserName = ko.observable($("#StoreValues").val());
self.Enterprise = ko.observable($("#fpIdentifier").val());
self.UpdateFP = function () {
$.ajax({
url: "/Home/createDeal",
type: "POST",
data: { tag: self.FP() },
success: function (data) {
self.FpData($.parseJSON(data));
//return result;
},
error: function (data) {
//return result;
}
});
}
return self;
}
ko.applyBindings(new App());
这是我的页面级Js
var Discovery = function() {
var self = {};
var application = new App();
self.KeyWords = ko.observable();
self.GetSearchKeywords = ko.computed(function () {
var data = application.FpData();
if (data != null) {
$.ajax({
url: "/Home/GetSearchKeywords",
type: "POST",
data: { tag: application.UserName(), EnterpriseId: application.Enterprise(), StoreType: "SINGLE", offset: 1 },
success: function (res) {
self.KeyWords($.parseJSON(res));
},
error: function (res) {
}
});
}
});
return self;};ko.applyBindings(new Discovery());
我的视图如何引用该值,因为我需要两个视图模型中的所有值
我认为:
<tbody data-bind="foreach: $root.KeyWords()">
<tr>
<td data-bind="text: keyword"></td>
<td data-bind="text: App().FormatDate(createdOn)"></td>
<td data-bind="text: ip"></td>
</tr>
</tbody>
<input data-bind="value: App().FP()"/>
我怎样才能做到这一点
更新
这是我发现有用的链接 这是(IMHO)不可能的,只能将一个模型绑定到特定元素
我会尝试使一个模型对象成为另一个对象的属性。您应该将两个viewModels“合成”在一起: JS:
var App = function (pageVm) {
var self = {};
if (typeof pageVm !== 'undefined') {
self.pageVm = pageVm;
}
self.FP = ko.observable($("#fpTag").val());
self.UserName = ko.observable($("#StoreValues").val());
self.Enterprise = ko.observable($("#fpIdentifier").val());
self.UpdateFP = function () {
$.ajax({
url: "/Home/createDeal",
type: "POST",
data: { tag: self.FP() },
success: function (data) {
self.FpData($.parseJSON(data));
//return result;
},
error: function (data) {
//return result;
}
});
}
return self;
}
var pageVm = new Discovery();
ko.applyBindings(new App(pageVm));
现在,您的应用程序绑定无需修改即可工作,您可以通过App.pageVm属性访问特定于页面的虚拟机
通常,我更喜欢这样做,而不是将每个VM绑定到不同的DOM节点(也是一个选项),因为通常一个节点可能嵌套在另一个节点中,这会使绑定变得困难。我在其中一篇文章中读到,双视图模型绑定可以使用敲除JS。您可以在一个HTML页面中绑定两个模型,但不能绑定到同一个元素。
ko.applyBindings(model)
函数将您的模型绑定到整个文档。您可以使用ko.applyBindings(model,selector)
,例如ko.applyBindings(model1,#my-div-1')
和ko.applyBindings(model2,#my-div-2')
绑定两个模型,但每个模型都绑定到文档的不同部分。至少据我所知。无论如何,如果有一种方法可以实现多个绑定,我很乐意学习。据我所知,您无法实现您想要实现的目标。如果你还有那篇文章的链接,我很乐意阅读。请在这里发布。据我所知,你链接的文章中的两个解决方案实际上使用的是主视图模型,只有这个主模型绑定到视图。两个实际的视图模型(viewModel1
和viewModel2
)实际上是主模型的属性。假设您将视图模型适当地带到模板/视图中,您可以使用带有:绑定的。谢谢你的回复。。我找到了这个的链接。。我正在我的更新中分享。