Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在MVC4视图中使用敲除JS的两个ViewModels绑定_Javascript_Ajax_Asp.net Mvc 4_Knockout.js - Fatal编程技术网

Javascript 在MVC4视图中使用敲除JS的两个ViewModels绑定

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").

我正在使用KnockoutJS3.3.0。在我的应用程序中,我有一个通用的javascript文件,它在整个应用程序中都被引用。除此之外,我将为每个页面提供单独的Js文件

所以我有两个视图模型,一个是通用的,另一个是页面级视图模型页面级视图模型。我的两个Js文件的所有功能都是ajax

我需要把它们绑在视线中

这是我的通用视图模型

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
)实际上是主模型的属性。假设您将视图模型适当地带到模板/视图中,您可以使用带有:绑定的
。谢谢你的回复。。我找到了这个的链接。。我正在我的更新中分享。