Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/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
Knockout.js 在保持绑定的同时替换淘汰模型中的整个对象_Knockout.js - Fatal编程技术网

Knockout.js 在保持绑定的同时替换淘汰模型中的整个对象

Knockout.js 在保持绑定的同时替换淘汰模型中的整个对象,knockout.js,Knockout.js,在KOs网站或Google搜索中,我似乎找不到任何文档描述如何在维护绑定的同时更改视图模型中的整个对象 $(function () { var stuff = { IntroData: { SomeObject: { Name: 'Hello' } } }; var someObject = { Name: 'World' }

在KOs网站或Google搜索中,我似乎找不到任何文档描述如何在维护绑定的同时更改视图模型中的整个对象

$(function () {
    var stuff = {
        IntroData: {
            SomeObject: {
                Name: 'Hello'
            }
        }
    };

    var someObject = {
        Name: 'World'
    }
    window.viewModel = ko.mapping.fromJS(stuff);
    ko.applyBindings(window.viewModel);

    $("#btnUpdateSomeObject").click(function() {
        try
        {
            window.viewModel.IntroData.SomeObject = ko.mapping.fromJS(someObject);
        } catch(ex) {
            alert("Failure: " + ex.toString());
        }
    });
});
我有一把不工作的小提琴,它描述了这种情况:


这可能吗?我觉得这要么是KO的一个巨大缺陷,要么是我不恰当地使用了它。

您使用
KO.mapping.fromJS时遇到的问题

因此,您不应该使用
ko.mapping.fromJS(someObject)
,而应该使用
ko.mapping.fromJS(someObject,{},window.viewModel.IntroData.someObject)

  • someObject
    更新的数据
  • {}
    映射选项
  • window.viewModel.IntroData.SomeObject
    您要更新的目标对象
  • 更新:

    ko.mapping.fromJS的第三个参数表示目标


    使用
    ko.mapping.fromJS时出现的问题
    因此,您不应该使用
    ko.mapping.fromJS(someObject)
    ,而应该使用
    ko.mapping.fromJS(someObject,{},window.viewModel.IntroData.someObject)

  • someObject
    更新的数据
  • {}
    映射选项
  • window.viewModel.IntroData.SomeObject
    您要更新的目标对象
  • 更新:

    ko.mapping.fromJS的第三个参数表示目标


    是的,这是可能的,但有些物体需要是可观察的

    var stuff = {
        IntroData: {
            SomeObject: ko.observable({
                Name: 'Hello'
            })
        }
    };
    
    当你“设置”某个对象时,它是一个可观察的对象;ko将更新视图

    window.viewModel.IntroData.SomeObject(ko.mapping.fromJS(someObject));
    

    是的,这是可能的,但某些物体需要是可观察的

    var stuff = {
        IntroData: {
            SomeObject: ko.observable({
                Name: 'Hello'
            })
        }
    };
    
    当你“设置”某个对象时,它是一个可观察的对象;ko将更新视图

    window.viewModel.IntroData.SomeObject(ko.mapping.fromJS(someObject));
    


    为什么
    某个对象需要是可观察的。
    ?他已经在使用ko.mapping,它将属性转换为observalesIf IntroData和SomeObject不可观测数据更改时视图将不会刷新。你说得对,但这是由mapping插件自动完成的。请检查我的“我已经向你投了赞成票”,虽然这是正确的,但这不是我喜欢的方法,因为我有几十个。@ebram tharwat,你是对的映射。fromjs(有3个参数)完成它的工作。但是当您在init上调用ko.mapping.fromJS(stuff)时。它仅将Name属性转换为可观察属性。我认为SO想要设置SomeObject,而不仅仅是Name属性。为什么
    SomeObject需要是可观察的。
    ?他已经在使用ko.mapping,它将属性转换为observalesIf IntroData和SomeObject不可观测数据更改时视图将不会刷新。你说得对,但这是由mapping插件自动完成的。请检查我的“我已经向你投了赞成票”,虽然这是正确的,但这不是我喜欢的方法,因为我有几十个。@ebram tharwat,你是对的映射。fromjs(有3个参数)完成它的工作。但是当您在init上调用ko.mapping.fromJS(stuff)时。它仅将Name属性转换为可观察属性。我以为SO想要设置某个对象,而不仅仅是Name属性。啊,我不知道还有第三个参数选项。非常感谢你!不客气,有时候你需要在文件中看得更深一些。我看得更深一些,但结果发现我找错了方向。在不破坏绑定的情况下改变整个对象的能力似乎是核心KO功能的一部分,而不是插件。我爱你。我在琢磨如何解决这个问题,但不知道它这么简单。@SHAREK you welcome。。我以前曾两次遇到过这个问题啊,我不知道还有第三个参数选项。非常感谢你!不客气,有时候你需要在文件中看得更深一些。我看得更深一些,但结果发现我找错了方向。在不破坏绑定的情况下改变整个对象的能力似乎是核心KO功能的一部分,而不是插件。我爱你。我在琢磨如何解决这个问题,但不知道它这么简单。@SHAREK you welcome。。我曾经两次面对过这个问题