【问题标题】:Bind knockoutjs to javascript object property将 knockoutjs 绑定到 javascript 对象属性
【发布时间】:2017-05-30 08:40:28
【问题描述】:

我是 Knockoutjs 的新手,所以请多多包涵。

我想 knocoutjs 将一个 DxForm (DevExpress) 绑定到一个 javascript 对象属性,但我收到一个错误...“无法读取未定义的属性 'items'”。

我不确定这是淘汰赛问题、DevExpress 问题还是我的编码技能不足。

这是我的代码...

HTML:

<div data-bind="dxForm: frm.options"></div>

Javascript:

var viewModel = function() {
    var that = this;

    // -----------------------------------------------------------------
    // Faste...
    // -----------------------------------------------------------------
    that.frm = {
       items: ko.observable(undefined),
       data: ko.observable(undefined),
       instance: ko.observable({}),
       options: {
          items: that.frm.items,
          formData: that.frm.data,
          onInitialized: function(e) {
             that.frm.instance(e.component);
          },
       },
    };

    return {
       frm: that.frm,
    };

 };

 var vm = new viewModel();
 ko.applyBindings(vm);

 var items = [{
    "dataField": "test",
    "editorOptions": {
       "type": "date",
       "pickerType": "calendar",
    },
    "editorType": "dxDateBox",
    "name": "Test",
    "visible": true
 }];

 var data = {
    test: 10,
 };

 vm.frm.data(data);
 vm.frm.items(items);

JSFiddle:https://jsfiddle.net/MojoDK/ke395v2c/3/

我想绑定到对象,因为我将使用多个 DxForm 对象,并且我喜欢将每个 DxForm 的代码保存在一个对象中(更易于阅读)。

知道为什么会失败吗?

谢谢。

【问题讨论】:

    标签: javascript knockout.js devextreme


    【解决方案1】:

    您只是在 frm 中遇到了关闭问题。

    frm 对象中的 that 属性不存在,您应该使用 this...

    但在您的 onInitialized 函数中,thisthat 不会针对您的 viewModel 对象...

    所以这种方式,最简单的就是稍后声明选项对象:

     that.frm = {
           items: ko.observable(undefined),
           data: ko.observable(undefined),
           instance: ko.observable({})
        };
    
             that.frm.options = {
              items: that.frm.items,
              formData: that.frm.data,
              onInitialized: function(e) {
                 that.frm.instance(e.component);
              },
           };
    

    更新jsfiddle

    【讨论】:

    • 哦……好吧……我明白了。谢谢你在这里帮助我!我会使用你的解决方案。
    猜你喜欢
    • 2016-01-22
    • 1970-01-01
    • 2016-06-18
    • 2011-10-03
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多