Невозможно получить текст в раскрывающемся списке кендо с помощью MVVM из другой модели представления

У меня есть простой раскрывающийся список, определенный следующим образом:

<div id="ActionMenu">
   <input id="ddlActionList"
       data-role="dropdownlist"
       data-text-field="text"
       data-value-field="value"
       data-value-primitive="true"
       data-bind="value: selectedAction, source: actionList"/>
 </div>

А в другом div у меня есть простое всплывающее окно:

<div id="window"
    data-role="window"
    data-title="Message panel"
    data-actions="['close']"
    data-bind="visible: isVisible, enabled: isEnabled">
<p>Action selected: <span data-bind="text: getSelectedAction()"></span></p>
</div>

и все это заключено в div ActionMenu.

this.ActionMenu = kendo.observable({
        actionList: [{ text: 'Option A', value : 0 },
                     { text: 'Option B', value : 1 },
                     { text: 'Option C', value : 2 },
                     { text: 'Option D', value : 3 }],
        selectedAction: 0,
        selectedActionText: function() {
            // return what ?            
            }
        }
    });

Моя проблема в том, что у меня нет возможности захватить выделенный текст из модели представления окна:

this.MessageWindow = kendo.observable({
        actions: ["Close"],
        getSelectedAction: function (e) { return that.ActionMenu.get("selectedActionText"); }
    });

Если я сделаю что-то вроде этого:

var ddlActionList = that.kWidgetHelper.getWidgetInstance("ddlActionList");
ddlActionList.text();

Это всегда возвращает первый текст «Вариант A», а не выбранный.

Казалось бы, это легко сделать, но пока мне не удается захватить выделенный текст.

Я также пробовал:

  this.actionList[this.get("selectedAction")].text which produces an error.

Я также пробовал:

selectedActionText:  function(event) {
            return event.sender.text();
        }

Что не работает.

Также

 selectedActionText: function() {
            return that.ActionMenu.actionList[that.ActionMenu.selectedAction].text;
        },

Всегда возвращает первый вариант.

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

Любые идеи, как это сделать?


person Nick    schedule 11.02.2015    source источник
comment
скопируйте в демо, пожалуйста   -  person Lars Höppner    schedule 11.02.2015
comment
Я пытаюсь создать демонстрацию jsfiddle, но слишком много ошибок, это часть большого проекта, и очень сложно извлечь этот простой сценарий.   -  person Nick    schedule 11.02.2015


Ответы (1)


Метод text() DDL должен выполнить работу, если выбор DDL изменился, он должен показать соответствующий текст.

Результат также должен быть таким же, если вы используете метод dataItem(), а затем получаете из него свойство text.

person Petur Subev    schedule 11.02.2015
comment
Это будет работать, только если вы привяжете их к одной и той же модели представления. Но если я вызову this.ActionMenu.SelectedText внутри this.MessageWindow, то он никогда не изменится. Чем больше я читаю об этом, тем очевиднее становится проблема кросс-модельного общения, что, по утверждению кендо, невозможно. - person Nick; 12.02.2015
comment
Я принимаю это, потому что, как оказалось, это не поддерживается кендо, и вам нужно привязываться к той же модели представления. - person Nick; 07.04.2015