سؤال

Durandal:ما هي الطريقة الصحيحة لتمرير البيانات (المعلمات) بين Viewmodels إذا كان ذلك ممكنا (دون التعامل مع الخلفية ).

دعونا نقول لدي 2 الآراء نظرة عامة و التفاصيل أريد أن ذهب المستخدم كليك على قائمة عنصر من نظرة عامة فإنه يأخذ هوية هذا العنصر ونقله إلى التفاصيل Viewmodel حتى أستطيع أن تبدأ العمل مع هذا المعرف.

شكرا لك على المساعدة

هل كانت مفيدة؟

المحلول

تلميح:ربما كنت تريد الطريق النهج القائم.الآخر هو من أجل اكتمالها.

Viewmodel النهج القائم عموما أود أن أقول:إنشاء وحدة نمطية, دعنا نسميها البيانات ، وحقن وحدة البيانات في كل viewmodels.نظرة عامة ثم يمكن تعيين clickedElementId السمة على وحدة البيانات و التفاصيل يمكن قراءة قيمة السمة واستخدامها (يمكن أن تجعل حتى السمة الملحوظة حتى التفاصيل يحصل على إخطار عندما السمة تغيير نظرة عامة).هذا النهج يعمل عند كل viewmodels يمكن أن تكون نشطة في نفس الوقت ، في حين التالي (يفضل) الحل يعمل فقط إذا كنت في الطريق من عرض واحد إلى آخر ، لذلك فهي لم نشطة في نفس الوقت.هذا 'viewmodel يحركها نهج شيء أنا شخصيا استخدام البيانات المشتركة في التطبيق (يمكنك أيضا استخدام التطبيق الخاص بك قذيفة viewmodel لهذه الأنواع من الصفات).

الطريق النهج القائم يبدو أن ما كنت تريد أن تفعل ذلك إعطاء وصف الحالة.طرق محددة يمكن أن تأخذ (اختياري) معلمات.افترض أن لديك الآن الطريق 'تفاصيل', يمكنك تغييره إلى تفاصيل/:id' (يقبل هوية المعلمة غير الاختياري) أو تفاصيل(/:id)' (يقبل هوية المعلمة اختيارية).

تحتاج معالج الحدث قليلا مثل هذا عن طريق النقر فوق عنصر القائمة:

overview.onElementClick = function (e) {
    var element = this, // The idea is that you need the clicked element for the next line of code
        koDataForElement = ko.dataFor(element);

    router.navigate('details/' + koDataForElement.id);
}

كو.dataFor هو لطيف خروج المغلوب مساعد للحصول على viewmodel البيانات منضم إلى عنصر يمكنك تمرير إلى ذلك ، في هذه الحالة القائمة عنصر.انقر فوق كنت ترغب في الانتقال إلى التفاصيل ، و تمرير معرف النقر فوق عنصر إلى التفاصيل.أن البرمجية أعلاه يفعل كل ذلك.

الآن التفاصيل الخاصة بك viewmodel هو تنشيط وظيفة ينبغي أن تبدو هذه:

details.activate = function (id) {
    // id is the parameter we defined for the route. Now you are free to leverage it inside your second view!
};

تحرير:تلميح إضافي:يمكنك أيضا تحريك المسار مع id مباشرة من الرابط.افترض أن لديك قائمة كاملة عنصر ملفوفة في علامة مرساة, هل يمكن أن تفعل شيئا مثل هذا:

<div data-bind="foreach: myListOfElements">
    <a href="#" data-bind="attr: { href: '#details/' + id }">listElementGoesHere</a>
</div>

حظا سعيدا!إذا كان لا يزال من غير الواضح اسمحوا لي أن أعرف ،

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top