当前位置: 首页 > 知识库问答 >
问题:

无法将视图与敲除中的复杂对象绑定。js

公羊渝
2023-03-14

我正在尝试使用KnockOut在视图上绑定一个复杂对象。js。没有使用overservable()和observableArray(),我就能够将对象绑定到视图。但是,当我实现observable()时,返回的结果将可观察对象添加到我的javascript viewmodel中,并且我的视图无法绑定viewmodel。

下面是服务器端的代码实现:


    Model:

    public class SurveyQuestion
    {
        public string QuestionNumber { get; set; }
        public string Question { get; set; }
        public QuestionType QuestionTypeStructure { get; set; }
        public IList OptionsList { get; set; }
    }

    public enum QuestionType
    {
        CheckBox,
        RadioButton,
        TextBox,
        AdvancedCheckBox,
        AdvancedRadioButton
    }

    public class Options
    {
        public string OptionValue { get; set; }
    }

    ViewModel:

    public class SurveyCollection
    {
        public IList SurveyList { get; set; }
    }

上述泛型结果的结果将显示在下面的json中


    {"SurveyList":[

    {"QuestionNumber":"1","Question":"Write down the second consonant after the second vowel?","QuestionTypeStructure":2,"OptionsList":[{"OptionValue":"F"},{"OptionValue":"G"},{"OptionValue":"C"},{"OptionValue":"B"}]},

    {"QuestionNumber":"2","Question":"Complete the following letter series: ZYX/ VW/ UTS/ QR/ PON/ LM/ KJI?","QuestionTypeStructure":1,"OptionsList":[{"OptionValue":"GB"},{"OptionValue":"IJ"},{"OptionValue":"GH"},{"OptionValue":"LM"}]},

    {"QuestionNumber":"3","Question":"What would be the numrical digits to represent the word VOWEL when the letters of the alphabets were numbered as A 26, B 25, C 24 and o on till Z 1.","QuestionTypeStructure":0,"OptionsList":[{"OptionValue":"5 ,12 ,4, 22, 15"},{"OptionValue":"6 ,12 ,5, 22, 15"},{"OptionValue":"5 ,14 ,4, 22, 16"},{"OptionValue":"4 ,13,4, 22, 12"}]}

    ]}


    @model Test.UI.ViewModel.SurveyCollection
    @using System.Web.Script.Serialization

    [h2]Survey[/h2]

    [div data-bind="template: { name: 'surveyTemplate', foreach: SurveyList }"][/div]

    [script type="text/html" id="surveyTemplate"]
        [div style = "margin-bottom:20px"]
            [div style = "margin-bottom:10px"]
                [strong data-bind="text: Question"][/strong]
            [/div]
            [div]
[ul data-bind="template: { name: function() { return QuestionTypeStructure.toString(); }, foreach: OptionsList }"]
                [ul]
            [/div]
        [/div]
    [/script]

    [script type="text/html" id="0"]
        [div]
            [input type = "radio" style = "margin-right:10px; width: auto"/][span data-bind="text: $data.OptionValue" /]
        [/div]
    [/script]

    [script type="text/html" id="1"]
        [div]
            [input type = "checkbox" style = "margin-right:10px"/][span data-bind="text: $data.OptionValue" /]
        [/div]
    [/script]

    [script type="text/html" id="2"]
        [div]
            [input type = "text" style = "margin-right:10px"/]
            [span data-bind="value: $data.OptionValue" /]
        [/div]
    [/script]


        $(document).ready(function () {
            var surveyViewModel = {
                SurveyList: ko.observableArray([])
            };

            var data = $('').html("@(new JavaScriptSerializer().Serialize(Model))").text();
            var jsonData = $.parseJSON(data);
            if (jsonData != undefined) {
                //$.each(jsonData.SurveyList, function (baseIndex, T) {
                ko.utils.arrayForEach(jsonData.SurveyList, function (T) {
                    var surveyModel = new SurveyModel(T);
                    surveyViewModel.SurveyList.push(surveyModel);

                    ko.utils.arrayForEach(T.OptionsList, function (Q) {
                        var optionModel = new OptionModel(Q);
                        surveyModel.OptionsList.push(optionModel);
                        //surveyViewModel.SurveyList[baseIndex].OptionsList.push(optionModel);
                    });
                });
                ko.applyBindings(surveyViewModel);
           }
    });

    function SurveyModel(T)
    {
        this.QuestionNumber = ko.observable(T.QuestionNumber);
        this.Question = ko.observable(T.Question);
        this.QuestionTypeStructure = ko.observable(T.QuestionTypeStructure);
        this.OptionsList = ko.observableArray([]);
    }

    function OptionModel(Q)
    {
        this.OptionValue = ko.observable(Q.OptionValue);
    }

我很抱歉将html转换为其他内容。问题在于mozilla的错误字段中的上述结果如下所示:


    Error: Cannot find template with ID function observable() {
            if (arguments.length > 0) {
                // Write

                // Ignore writes if the value hasn't changed
                if ((!observable['equalityComparer']) || !observable['equalityComparer'](_latestValue, arguments[0])) {
                    observable.valueWillMutate();
                    _latestValue = arguments[0];
                    if (DEBUG) observable._latestValue = _latestValue;
                    observable.valueHasMutated();
                }
                return this; // Permits chained assignments
            }
            else {
                // Read
                ko.dependencyDetection.registerDependency(observable); // The caller only needs to be notified of changes if they did a "read" operation
                return _latestValue;
            }
        }
    http://localhost:3391/Scripts/knockout-2.1.0.debug.js
    Line 2653

共有1个答案

唐增
2023-03-14

问题出在[ul data-bind="模板:{Foreach: OptionsList}"]中,您没有给出模板名称。从你的其他模板判断,你想要这样的东西,我想:

[ul data-bind="foreach: OptionsList "]
    [li data-bind="template: $data.OptionValue]
    [/li]
[/ul]
 类似资料:
  • 我试图访问位于下的属性。所以基本上是一个数组,我要访问属性。 我得到以下错误。 无法处理绑定“text:function(){return process().parent[0].Id}” 无法读取未定义的属性“Id” 我尝试了以下不起作用的方法: 请帮助我如何访问ID。

  • 我使用Knockout。我需要建立一些功能。我从来没用过击倒。 每个视图都有一个视图模型,该模型通过从主视图模型调用。 属性在初始化开始时初始化,并在视图中使用,没有问题。例如: 这样初始化,并在无容器绑定中正确使用,如下所示: 因此,我以相同的位置/方式初始化我的新属性: 并按如下方式使用: 并得到这个错误: 击倒。js:72未捕获引用错误:无法处理绑定“foreach:function(){r

  • 我正在使用模板绑定来呈现一组单选按钮。元素上还有一个css绑定。 单击单选按钮时,viewmodel http://jsfiddle.net/d3YJc/1/

  • 我试图弄清楚如何使用knockout从html中添加和删除类。 应该发生的是,当我点击卡车时,按钮应该更新为btn红色,而car按钮应该删除btn红色。 我可以看到事件绑定正在工作,因为触发了警报并返回了正确的值,但我无法更新视图。 我编写了一个非常简单的JSFIDLE。net/N8GBB/11/(出于某种原因,stackoverflow不允许我发布链接)以下是我在JSFIDLE中使用的代码

  • 我看不出这里有什么问题,但图像不显示使用以下Knockout模板: 绑定到的对象如下所示: 呈现HTML对象时,我看到标签,单击复选框调用doSomething。 蒂亚。

  • 本文向大家介绍Android 在ButterKnife中解除绑定视图,包括了Android 在ButterKnife中解除绑定视图的使用技巧和注意事项,需要的朋友参考一下 示例 片段的视图生命周期与活动不同。在onCreateView中绑定片段时,在onDestroyView中将视图设置为null。当您调用bind为您执行此操作时,Butter Knife会返回Unbinder实例。在适当的生命周