简体   繁体   English

KnockoutJS不绑定

[英]KnockoutJS not binding

I cant seem to get the binding to work on my KnockoutJS app. 我似乎无法在我的KnockoutJS应用程序上进行绑定。

JSFIDDLE -> http://jsfiddle.net/maylortaylor/pfqnkj17/ JSFIDDLE-> http://jsfiddle.net/maylortaylor/pfqnkj17/

Here is the format of my JSON (generated by using <pre data-bind="text: ko.toJSON($root.forms,null,2)"></pre> ) 这是我的JSON格式(使用<pre data-bind="text: ko.toJSON($root.forms,null,2)"></pre>

[
  {
    "formTitle": "formTitle",
    "formDescription": "formDesc",
    "fieldTemplates": [
      {
        "fieldId": "text1",
        "title": "title",
        "description": "description fieldTemplate",
        "isReq": true
      },
      {
        "fieldId": "text2",
        "title": "ttitle22",
        "description": "description fieldTemplate 2",
        "isReq": false
      }
    ]
  }
]

And here is how i am trying to call it in the page 这就是我试图在页面中调用它的方式

<div id="MiddleColumn">
            <input data-bind="textInput: $root.formTitle" type="text" placeholder="Title" class="span8 hideOffFocus input-full large-type">
        <input data-bind="textInput: formDescription" type="text" placeholder="Description" class="hideOffFocus input-full">
</div

neither of those bindings work. 这些绑定都不起作用。

I create the forms object here 我在这里创建forms对象

var FormModel = function (forms) {
    var self = this;

    self.forms = ko.observableArray(ko.utils.arrayMap(forms, function (form) {
        return {
            formTitle: form.formTitle, formDescription: form.formDescription,
            fieldTemplates: ko.observableArray(form.fieldTemplates) };
    }));

};

ko.applyBindings(new FormModel(initialData));

i hope your are expecting something like this 我希望你期待这样的事情

Working fiddle here 在这里工作

Now if you change something in textboxes in preview you can see automatic updates ie mapping does make things back to ko way . 现在,如果您在预览中的文本框中更改了某些内容,则可以看到自动更新,即mapping确实使事情恢复了原样。

View Model : 查看模型:

 var mapping = {
        'fieldTemplates': {
            create: function (options) {
                return new FormModel(options.data);
            }
        }
    }

function FormModel(forms) {
        var self = this;
        self.forms = ko.observableArray();
        ko.mapping.fromJS(forms, mapping, self);

       // other stuff

       }

View : 查看:

<div id="MiddleColumn">
    <input data-bind="textInput: $root.formTitle" type="text" />
    <input data-bind="textInput: $root.formDescription" type="text"/><br/>
    <div data-bind="foreach:$root.fieldTemplates">
        <span data-bind="text:fieldId"></span> 
         <span data-bind="text:title"></span>
         <span data-bind="text:description"></span>
         <span data-bind="text:isReq"></span>
        <br/>
    </div>
</div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM