باستخدام Ember.js وHandbars، ما الفرق بين ربط القالب بطريقة عرض الفصل مقابل مثيل العرض؟

StackOverflow https://stackoverflow.com//questions/12663684

سؤال

الحالة الأولى. قالب ملزم لمثيل العرض.

على سبيل المثال، لنفترض أن لدي قالبًا:

    <script type="text/x-handlebars" data-template-name="instance-template">
        <b> Name: </b> {{ name }}
    </script>

يمكنني بعد ذلك ربط مثيل العرض به وإلحاقه بالمستند (من أجل البساطة، تم الإعلان عن اسم المعلمة في العرض، بدلاً من الارتباط ببعض طبقات التحكم):

App.instanceView = Ember.View.create({
    templateName: 'instance-template',
    name: 'hello world'
}).append();

ما الذي يحدث بالضبط خلف الكواليس هنا؟من خلال تحديد اسم القالب، هل يأخذ مثيل العرض هذا القالب بطريقة ما ويجمعه مع المعلمات التي تم تمريرها في الخلفية؟

الحالة الثانية.ربط القالب بعرض الفصل الدراسي، القالب غير مسمى.

ومع ذلك، إذا كنت أرغب في ربط قالب بطريقة عرض الفصل مثل:

App.ViewClass = Ember.View.extend({
    name: 'hello world',
});

تستخدم الوثائق قالبًا لهذا النموذج:

<script type="text/x-handlebars">
    {{ #view App.ClassView }}
        This part renders: {{ name }} 
    {{ /view }}
</script>

يرجى ملاحظة أنه عندما أفعل هذا، لسبب ما لا يعمل هذا.الاقتباس "يعرض هذا الجزء:يتم عرض ' في القالب فعليًا، ولكن لا يتم عرض العلامة {{ name }}.ليس لدي أي فكرة عن السبب.

الحالة الثالثة.ربط القالب بعرض الفصل، يتم تسمية القالب.

بالإضافة إلى ذلك، إذا قمت بتسمية القالب أعلاه:

<script type="text/x-handlebars" data-template-name = 'class-template'>
    {{ #view App.ClassView }}
        This part renders: {{ name }} 
    {{ /view }}
</script>

وتغيير العرض إلى

App.ViewClass = Ember.View.extend({
    templateName: 'class-template',
    name: 'hello world',
});

لا شيء يظهر على الإطلاق.مرة أخرى لا أرى ما يحدث هنا.

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

المحلول

حالة 1 ياه إلى حد كبير.يتم عرض العرض (ونحن نفترض أن السياق هو العرض) ثم عندما نرى {{name}} سيكون هذا معادلاً لـ instanceView.get('name').

الحالة 2 لا تغير القوالب المجهولة السياق.عند تحديد قالب داخل {{#view}} السياق لن يتغير.للحصول على سياق العرض الذي تم استخدامه مع {{#view}} المساعد الذي ستحتاج إلى استخدامه view.name.على سبيل المثال:

App.ViewClass = Ember.View.extend({
    name: 'hello world',
});

<script type="text/x-handlebars">
    {{name}} <!-- lets pretend this is "something else" -->
    {{#view App.ClassView}}
        This part renders: {{name}} <!-- "something else" -->
        {{view.name}} <!-- "hello world" -->
    {{/view}}
</script>

الحالة 3هذا المثال لا معنى له وربما يجب أن يكون هناك فشل في التأكيد مع Ember (إصدار غير مصغر).أنت تقوم بتعريف طريقة عرض تستخدم قالبًا، ثم داخل هذا القالب يعرض نفس العرض مرة أخرى باستخدام قالب مجهول.إذا كان هذا هو المعنى الذي تقصده، فهل يمكنك تقديم حالة استخدام لأنه من المحتمل أن تكون هناك طريقة أبسط بكثير للقيام بما تحاول تحقيقه.

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