Как получить управление кендо в модели представления при использовании MVVM

У меня есть простая страница с несколькими элементами управления, такими как:

<div id="ActionMenu">
    <ul id="panelbar"
        data-role="panelbar"
        data-bind="events: { enable: onEnable, collapse: onCollapse }">
        <li id="item1">
            <span>Action menu</span>
            <div>
                <div class="panelActions">
                    <button data-role="button"
                            data-bind="visible: isVisible, enabled: isEnabled, events: { click: onClick }"
                            id="logOutButton">
                        Log users out
                    </button>
                </div>
            </div>
        </li>
    </ul>
</div>

а затем я делаю что-то вроде этого, чтобы создать модель представления и связать вещи:

var vm;
require(['App/Admin/userInfoGrid'], function (userInfo) {
    vm = userInfo.UserInfoGrid(config_UserInfo);
    kendo.bind($(config_UserInfo.gridId), vm);
    kendo.bind($(config_UserInfo.actionMenu), vm.ActionMenu);
    kendo.bind($(config_UserInfo.logOutButton), vm.LogOutButton);
    kendo.bind($(config_UserInfo.messageWindow), vm.MessageWindow);
});

На странице есть несколько элементов управления, поэтому я связываю их все таким образом.

Внутри вм:

  this.ActionMenu = kendo.observable({
            expandMode: "single",
            //onCollapse: onCollapse,
            //onEnable: function(e) {
            //    alert("on enable");
            //}
        });

Это работает, но на панели, которую я использую, есть методы и события, и я хочу их использовать.

До сих пор, если я хочу использовать встроенные методы и события внутри модели представления, мне нужно сделать что-то вроде этого:

var panelBar = $(config.actionMenu).data("kendoPanelBar");
panelBar.enable($("#item1"), false);

И если я попытаюсь захватить и проверить наблюдаемое:

console.log(that.ActionMenu) 

В нем нет встроенных методов кендо, только те, которые я определил сам.

Поскольку я не хочу заново изобретать велосипед и повторно реализовывать все те методы, которые уже должны быть на месте, есть ли способ заставить мое ActionMenu получить доступ к функциональности «kendoPanelBar»?

Поскольку они, в конце концов, являются одним и тем же элементом управления, я полагаю, что должен быть какой-то способ заставить его работать следующим образом:

that.ActionMenu.enable($("#item1"), false);

Любые идеи? Этот конкретный пример относится к PanelBar, но тот же вопрос относится ко всем другим элементам управления. заранее спасибо


person Nick    schedule 06.02.2015    source источник
comment
Я думаю, что лучшее, что вы можете сделать, это получить PanelBar после того, как все будет привязано, а затем получить доступ из замыкания, поэтому вам не нужно получать его каждый раз; все остальное, о чем я могу думать, сложнее   -  person Lars Höppner    schedule 07.02.2015
comment
Да, я уверен, что это сработает, но некоторые функции, которые я хочу реализовать, находятся внутри событий в модели представления, и вы определяете их до того, как они будут привязаны.   -  person Nick    schedule 09.02.2015
comment
просто назначьте все переменные виджета один раз после вызова kendo.bind   -  person Lars Höppner    schedule 09.02.2015
comment
Я ответил на аналогичный вопрос здесь   -  person Lars Höppner    schedule 05.03.2015