在kendoListView模板上获取$ page上下文

时间:2018-02-05 23:25:01

标签: typescript knockout.js kendo-template kendo-listview

我使用了kendoListView,我想只显示满足我条件的项目:

<div id="selectableListView" data-bind="kendoListView: { data: dataSource._kendoDataSource, template: $('#template_selectable').html(), selectable: true, change: changeMultiSelection, navigatable: true, dataBound: productsRetrieved}"> </div>

<script type="text/x-kendo-tmpl" id="template_selectable">
    #if(variableFromPageId !== Id){#
    <div class="principal">
        <div class="list-view-details">
            <div class="secction-top">
                <div class="item-name-two-lines item-name-link">
                    <a class="link"> #:Project.Utils.getDefaultName(Name)# </a>
                </div>
            </div>
            <div class="secction-center">
                <span class="item-description-two-lines">#:Project.Utils.getDefaultDescription(Description)#</span>
            </div>
        </div>
    </div>
    #}else{#
        console.log('Do nothing!');
    # }#
</script>

问题是variableFromPageId位于我的页面上下文中,listview无法访问该上下文如何从调用kendoListView的页面访问变量?或者将variableFromPageId作为变量发送。我尝试过很多东西:

<div data-bind="if: checkId(Id)">
</div>

#console.log(ko.contextFor(this).$page.checkId('#:Id#'));#

内部数据绑定doens在列表视图中完全无效,它忽略了所有数据绑定,控制台日志说第二个选项无法找到$ page of null,所以我怎么能从具有KendoListView的页面获取上下文。

1 个答案:

答案 0 :(得分:0)

您的数据源中不得有variableFromPageId,因此您的模板不知道它是什么。

您可以将该值添加到现有数据源中,方法是将其添加到每个数组值,也可以将不同的数据源传递给模型中较高的Kendo模板,例如您的Knockout {{1} }或$root值。如果选择后者,则需要在Kendo模板中放置自己的$parent语句以循环遍历数组。