0

我们在 ASP.NET MVC 4 项目中使用 Durandal JS:

我只是想将一些 observables 绑定到我的 Html 视图,如下所示:

 <div id="nodetype" class="k-block ">
     <div class="pull-left" >
         <h3>Enter HVaR Parameters</h3>
          <ul>
            <li>
             <label>Liquidataion Days):  </label>
             <input id="liquidDays" data-bind="value: LiquidDays" class="k-textbox" />
            </li>
          </ul>
      </div>                    
  </div>                    

然而,可观察到的“LiquidDays”仍为“0”值。我希望下面的 ViewModel 代码会更新“LiquidDays”,因此将其绑定到我的 html 文本字段:

视图模型代码:

 var vm = kendo.observable({
    activate: activate,
    onclickUpdate: UpdateMyStuff,
    title: title,
    LiquidDays: 0,
    ConfLevelPct: 99,
    periodType: "",
    attached: function (view) {
        loadHVarConfig();     
        kendo.bind($("#nodetype"), vm);           
    },
});
return vm;

这是我对服务器端的 Ajax 调用的绑定函数:

 function loadHVarConfig() {        

    // LOAD CONFIG PARAMETERS !!
    var jq = $.ajax({
        url: '/api/breeze/GetVaRConfig',
        type: "get",
        dataType: "json",
        contentType: 'application/json',            
    });
    jq.success(function (data) {
        bindHvarParams(data);              // ON SUCCESS BIND TO VIEW MODEL
    });

    }

    function bindHvarParams(data) {        

      // Set ViewModel properties from data array
      vm.set("LiquidDays", data[0].liquidationDays);        
      vm.LiquidDays = data[0].liquidationDays;
      vm.ConfLevelPct = data[0].confidenceLevel;
      vm.numOfObserv = data[0].historicPeriodLength_size;   
      vm.periodType = data[0].historicPeriodLength_unit;
      vm.holidayCal = data[0].calendarId;
      vm.startDateFixedPeriod = data[0].historicPeriodStart;

    }

我使用此链接作为指南,但我遗漏了一些东西:http ://docs.kendoui.c​​om/getting-started/framework/mvvm/observableobject

谢谢你。鲍勃

4

2 回答 2

1

kendo mvvm 逻辑仅在执行 kendo.bind() 方法后才有效。您在可观察的附加函数中使用了 kendo.bind() ,但是您调用了附加方法。

For more details refer this 

工作演示

于 2013-11-07T06:04:37.620 回答
0

首先,确保您遵循此处列出的步骤,以便剑道和 Durandal 能够很好地相处:http ://durandaljs.com/documentation/KendoUI/ 。

其次,如果您按照上面的说明进行操作,为了使模型绑定起作用,您必须data-在 HTML 标记上使用正确的属性。对于 Durandal 绑定,它是data-bind="",对于剑道绑定,它是data-kendo-bind="".

第三,由于上述步骤,您不能将 Durandal(又名 Knockout)样式绑定与 Kendo 样式绑定混合。它们是完全排他的,彼此不兼容。这意味着您不能在 Kendo 可观察对象中拥有任何仅适用于 Durandal 的函数或属性。说得更清楚一点,你不应该把activateattached放在那个 Kendo observable 里面。您应该像这样返回视图模型:

return {
  activate: activate,
  attached: attached,
  viewModel: kendo.obeservable({
    onclickUpdate: UpdateMyStuff,
    title: title,
    LiquidDays: 0,
    ConfLevelPct: 99,
    periodType: ""
  })
};
于 2013-11-08T19:28:32.507 回答