Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.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/9/opencv/3.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 敲除映射并不表示html的期望值_Javascript_Jquery_Knockout.js - Fatal编程技术网

Javascript 敲除映射并不表示html的期望值

Javascript 敲除映射并不表示html的期望值,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我对敲除映射有问题。我使用knockout映射插件来表示用JSON序列化的表单。在使用敲除映射之前它是有效的,但是我需要使用敲除映射,因为我希望我的属性是可观察的 您可以在此处看到工作html: 这是我不工作的javascript代码: var formData = {"data": [ { "groupName" : "Properties", "content" :

我对敲除映射有问题。我使用knockout映射插件来表示用JSON序列化的表单。在使用敲除映射之前它是有效的,但是我需要使用敲除映射,因为我希望我的属性是可观察的

您可以在此处看到工作html:

这是我不工作的javascript代码:

var formData = 
    {"data": 
        [
            {
            "groupName" : "Properties",
            "content" : 
            [
                {
                    "title" : "Calculation Method",
                    "formType" : "select",
                    "value" : 
                    [
                        {
                            "title" : "Voltage Drop - Unbalanced",
                            "selected" : true
                        },
                        {
                            "title" : "Voltage Drop - Balanced"
                        }
                    ]
                },

                {
                    "title" : "Tolerance (% V)",
                    "formType" : "textBox",
                    "value" : 0.01
                },

                {
                    "title" : "Calculation Options",
                    "formType" : "radio",
                    "value" : 
                    [ 
                        {
                            "title" : "Flat Start (at Nominal Conditions",
                            "checked" : false
                        } ,
                        {
                            "title" : "Assume Line Transposition",
                            "checked" : true
                        }
                    ]
                },

                {
                    "title" : "Adjust Conductor Resistance at",
                    "formType" : "textBox",
                    "disabled" : true,
                    "value" : 77,
                    "appendLabel" : true,
                    "appendLabelText" : "°F"    
                }
            ]
            },
            {
            "groupName" : "Properties",
            "content" : 
            [
                {
                    "title" : "Calculation Method",
                    "formType" : "select",
                    "value" : 
                    [
                        {
                            "title" : "Voltage Drop - Unbalanced",
                            "selected" : true
                        },
                        {
                            "title" : "Voltage Drop - Balanced"
                        }
                    ]
                },

                {
                    "title" : "Tolerance (% V)",
                    "formType" : "textBox",
                    "value" : 0.01
                },

                {
                    "title" : "Calculation Options",
                    "formType" : "radio",
                    "value" : 
                    [ 
                        {
                            "title" : "Flat Start (at Nominal Conditions",
                            "checked" : false
                        } ,
                        {
                            "title" : "Assume Line Transposition",
                            "checked" : true
                        }
                    ]
                },

                {
                    "title" : "Adjust Conductor Resistance at",
                    "formType" : "textBox",
                    "disabled" : true,
                    "value" : 77,
                    "appendLabel" : true,
                    "appendLabelText" : "°F"    
                }
            ]
            }
        ]
    };  
ko.mapping.fromJS(formData);
下面是相同代码的JSFIDLE:


使用映射和不使用映射之间有什么问题?

在第二种情况下,您忘记了应用绑定

ko.applyBindings(formData);

在第二种情况下,您忘记应用绑定

ko.applyBindings(formData);

我不知道你的情况是否如此,但值得一贴

当我有一个更复杂的带有嵌套属性或列表的viewmodel时,我遇到了映射插件的问题。事实证明,在映射到已构建的viewmodel之后,子对象不再是可见的。有了这个问题,对我来说,这段代码起作用了,我在某处找到了什么(不幸的是,我真的不知道在哪里)。映射到viewmodel后,我为viewmodel调用了此函数

function makeAllObservables(observable) {
    // Loop through its children
    for (var child in observable()) {
        // If this child is not an observable and is an object
        if ((!ko.isObservable(observable()[child])) && (typeof observable()[child] === "object")) {
            // Make it an observable
            observable()[child] = ko.observable(observable()[child]);
            // Make all of its children observables
            makeAllObservables(observable()[child]);
        }
    }
};
用法(从服务器响应更新模型时,第一行不应出现):

例如,当您希望使用服务器上的新JSON数据更新viewmodel时,将映射到已构建的viewmodel。在这种情况下,我丢失了没有上述代码的嵌套绑定


更新:我找到了我借用技术的来源。请注意,我在那篇文章中稍微修改了代码,因为不知怎么的,这对我不起作用。

我不知道您的场景是否如此,但值得一提

当我有一个更复杂的带有嵌套属性或列表的viewmodel时,我遇到了映射插件的问题。事实证明,在映射到已构建的viewmodel之后,子对象不再是可见的。有了这个问题,对我来说,这段代码起作用了,我在某处找到了什么(不幸的是,我真的不知道在哪里)。映射到viewmodel后,我为viewmodel调用了此函数

function makeAllObservables(observable) {
    // Loop through its children
    for (var child in observable()) {
        // If this child is not an observable and is an object
        if ((!ko.isObservable(observable()[child])) && (typeof observable()[child] === "object")) {
            // Make it an observable
            observable()[child] = ko.observable(observable()[child]);
            // Make all of its children observables
            makeAllObservables(observable()[child]);
        }
    }
};
用法(从服务器响应更新模型时,第一行不应出现):

例如,当您希望使用服务器上的新JSON数据更新viewmodel时,将映射到已构建的viewmodel。在这种情况下,我丢失了没有上述代码的嵌套绑定


更新:我找到了我借用技术的来源。请注意,我在那篇文章中稍微修改了该代码,因为不知何故,这对我来说不起作用。

您需要将映射的viewmodel绑定到视图:

ko.applyBindings(ko.mapping.fromJS(formData))

由于现在一切都是可观察的,因此需要更改视图中的逻辑以使用方法语法:

要获得要显示的选项,您需要告诉knockout对象上的属性名称:


您需要将映射的viewmodel绑定到视图:

ko.applyBindings(ko.mapping.fromJS(formData))

由于现在一切都是可观察的,因此需要更改视图中的逻辑以使用方法语法:

要获得要显示的选项,您需要告诉knockout对象上的属性名称:



你到底怎么称呼它呢。我是说,你能观察到什么?在我的例子中,ko.mapping.fromJS(formData)会是什么?为什么会有这部分行:,$(“#myform”).get(0))@CoachNono,因为在我的例子中,我有多个表单,我只想对一个特定的表单应用这个绑定。.get(0)将从jQuery结果返回第一个匹配的表单。。。是的,因为您没有id为“myform”的表单。我认为不应该使用第二个参数。仅当您希望在特定HTML元素中应用绑定时才需要它。抱歉搞混了,我已经把它从我的帖子中删除了。你怎么称呼它呢。我是说,你能观察到什么?在我的例子中,ko.mapping.fromJS(formData)会是什么?为什么会有这部分行:,$(“#myform”).get(0))@CoachNono,因为在我的例子中,我有多个表单,我只想对一个特定的表单应用这个绑定。.get(0)将从jQuery结果返回第一个匹配的表单。。。是的,因为您没有id为“myform”的表单。我认为不应该使用第二个参数。仅当您希望在特定HTML元素中应用绑定时才需要它。很抱歉造成混淆,我已将其从我的帖子中删除。为什么我选择的项目未显示?我不确定,我正在查看您的绑定以尝试查看。我已经有一段时间没用击倒了。谢谢你,因为它以前工作过,太奇怪了!我丢失了:,由@DaveBy发现。为什么我选择的项目没有显示?我不确定,我正在查看您的绑定以尝试查看。我已经有一段时间没用击倒了。谢谢你,因为它以前工作过,太奇怪了!我丢失了:,由@DaveBthank找到,但是,我在尝试后没有看到我的选择中的项目。当我使用您的代码时,我的JSON不会得到更新,但当使用第一人称的答案时,它会得到更新。您的感谢,但是,我没有看到我的选择中的项目,在尝试之后当我使用您的代码时,我的JSON不会得到更新,但是当使用第一人称的答案时,它会得到更新。你的