使用MVVM编辑剑道UI网格弹出窗口

使用MVVM编辑剑道UI网格弹出窗口,mvvm,binding,kendo-ui,kendo-grid,Mvvm,Binding,Kendo Ui,Kendo Grid,我正在使用剑道UI网格,我已经将其配置为使用自定义模板的弹出式编辑 <script id="popup_editor" type="text/x-kendo-template"> <div id="editor"> <div class="k-edit-label"> <label for="Type">Type</label> </d

我正在使用剑道UI网格,我已经将其配置为使用自定义模板的弹出式编辑

    <script id="popup_editor" type="text/x-kendo-template">
    <div id="editor">
            <div class="k-edit-label">
                <label for="Type">Type</label>
            </div>

    <select data-role="dropdownlist" data-value-field="Type" data-text-field="Type"
                         data-bind="source: typeSource, value: selectedProduct"></select>

<div class="k-edit-label">
                <label for="Type">Option</label>
            </div>

<select data-role="dropdownlist" data-value-field="Option" data-text-field="Option"
                         data-bind="source: productsSource.Options, value: selectedOption"></select>
            </div>

</script>
我的操作返回JSON


问题是,当我单击“添加新记录”按钮时,没有调用
getTypesUrl
,并且没有填充dropdownlist。总体思路是为不同的类型提供不同的选项,并根据所选类型填充选项dropdownlist。我认为,之所以会出现这个问题,是因为只有在单击按钮时才会显示编辑器,剑道无法创建绑定。

如果每行的下拉列表相同,则从数据源获取其值,并将其存储在JavaScript页面中的变量中,并将下拉列表指向这个新的数据源。使用一些JavaScript来关联id和名称

或者,如果基于某些其他逻辑加载,则执行单独的调用以填充视图模型中下拉列表的数据源


进一步注意,您可以完全用JavaScript编写模板,并将其绑定到html,这样做的好处是,您可以调试它,以后仍可以通过ajax调用加载,而且可能会更小。

如果每行的下拉列表相同,则从数据源获取其值,并将其存储在JavaScript页面中的变量中,并将下拉列表指向此新数据源。使用一些JavaScript来关联id和名称

或者,如果基于某些其他逻辑加载,则执行单独的调用以填充视图模型中下拉列表的数据源

进一步注意,您可以完全用JavaScript编写模板,并将其绑定到html,这样做的好处是您可以调试模板,并且以后仍然可以通过ajax调用加载模板,而且可能会更小

    function ViewModel() {
        var getTypesUrl = "/Controller/Action";

        var viewModel = kendo.observable({
            typeSource: new kendo.data.DataSource({
                transport: {
                    read: {
                        url: getConditionTypesUrl,
                        dataType: "json"
                    },
                },
                batch: true,
                schema: {
                    model: {
                        id: "Type"
                    }
                }
            }),
            selectedType: null,
            selectedOption: null
        });

        kendo.bind($("#editor"), viewModel);
    }

ViewModel();