2

我在网格中有一个网格,父网格在 MVVM 中构建,子网格在其 data-detail-init http://jsbin.com/kuvejuw上初始化

<div data-role="grid"
     data-columns="[
                   { 'field': 'FirstName'},
                   { 'field': 'LastName'}  
                   ]"
     data-bind="source: dataSource"
     data-detail-init="viewModel.detailInit"
     >
</div>

如果在 viewModel 上有一个自定义属性(例如这里的 Text),并且在子网格的弹出编辑器中,我想绑定到这个属性。因此,例如,在更复杂的场景中,我可以通过在 viewModel 上使用数组(或可观察数组)来填充具有一系列值的下拉列表。

var viewModel = kendo.observable({
  dataSource: new kendo.data.DataSource ... // everything works here,
  detailInit: detailInit,
  Text: "This text should be displayed in editor in detail's grid",
});  

kendo.bind(document.body, viewModel);

问题是在详细网格编辑器的模板中无法检测到此属性(或整体 viewModel):

function detailInit(e){
...    
editable: {
          mode: "popup",
          template: kendo.template($("#child-editor-template").html())
        }
...
}

模板是这样构建的:

  <script type="text/x-kendo-template" id="child-editor-template">
     <span data-bind="text: Text"></span> 
  </script>

但我也试过了data-bind="text:viewModel.Text"。我尝试了各种解决方案,在 detailGrid 的编辑事件中设置 viewModel 上的 Text 属性,或者在 viewModel 绑定上设置它,但它不适用于这个 jsBin(3.2016 版本)。

现在有趣的是,我实际上能够在本地项目中使用 2015v3 Kendo UI 访问此属性,但我无法在此 jsBin 中复制它。

在我的本地项目中,虽然我仍然无法访问 ViewModel 中的事件,例如我可以做text: Text,但做不到events: {select: onSelect}

一旦对这件事进行排序,访问事件最终将是提出这个问题的原因,如果我对 mvvm 期望过高,我正在寻找一些提示来了解正在发生的事情。

编辑:

我期待在子网格http://jsbin.com/canomux的弹出编辑器中启用这种类型的功能

4

2 回答 2

0

像这样试试

我只是在您的模板中进行更改,

 <script type="text/x-kendo-template" id="child-editor-template">
   <input name="ShipCountry"/>
  </script>

http://jsbin.com/levenacari/edit?html,js,输出

于 2016-11-07T14:24:13.320 回答
0

似乎从 API 检索数据的方式有点出乎意料,所以随着变化:

options.success(e.data.Orders.results.toJSON());

options.success(e.data.Orders.results);

文字作品的装订。

使用事件绑定它不起作用 - 似乎它与 detailGrid 无关,但通常与网格有关, 此处描述

于 2016-11-14T09:43:52.337 回答