2015-02-11 64 views
0

我有这样定义的简单下拉列表以获得剑道下拉列表控件中的文本:无法使用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> 

它全部包装在ActionMenu div下。

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; 
     }, 

始终返回第一个选项。

我相信我的问题是我试图从另一个viewmodel获取一个viewmodel的当前值。

任何想法如何做到这一点?

+0

将其复制到演示请 – 2015-02-11 14:55:24

+0

我试图创建一个jsfiddle演示,但有太多的错误,它是一个大型项目的一部分,这是非常困难的提取这个简单的场景 – Nick 2015-02-11 15:36:25

回答

0

如果DDL选择已更改,DDL的text()方法应执行该工作,它应显示相应的文本。

如果您使用dataItem()方法,然后从中获取文本属性,结果也应该相同。

+0

这只会工作,如果你绑定他们在相同的viewmodel。 但是,如果我在this.MessageWindow中调用this.ActionMenu.SelectedText,那么它永远不会改变。 我读得越多,它就成为了一个明确的交叉模型交流问题,Kendo声称这是不可能的。 – Nick 2015-02-12 10:08:10

+0

我接受这个,因为事实证明,它不被kendo支持,你必须绑定到相同的viewmodel – Nick 2015-04-07 12:17:34

相关问题