ไม่สามารถรับข้อความในการควบคุมรายการดรอปดาวน์เคนโด้โดยใช้ 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() จากนั้นดึงคุณสมบัติข้อความออกมา

person Petur Subev    schedule 11.02.2015
comment
นั่นจะได้ผลก็ต่อเมื่อคุณผูกมันไว้ในโมเดลมุมมองเดียวกัน แต่ถ้าฉันเรียก this.ActionMenu.SelectedText ภายใน this.MessageWindow มันก็จะไม่เปลี่ยนแปลง ยิ่งฉันอ่านมันมากเท่าไร มันก็กลายเป็นปัญหาที่ชัดเจนของการสื่อสารข้ามโมเดล ซึ่งเคนโด้อ้างว่าเป็นไปไม่ได้ - person Nick; 12.02.2015
comment
ฉันยอมรับสิ่งนี้เพราะว่าปรากฎว่าเคนโด้ไม่รองรับและคุณต้องผูกเข้ากับโมเดลมุมมองเดียวกัน - person Nick; 07.04.2015