2012-10-31 69 views
3

如何使用{{#isolate}}?我找不出什麼Meteor {{#isolate}}。有沒有例子?

如果我做一個頁面一堆模板,如:

{{> page1}} 

<template name="template1">reactive source1</template> 
<template name="template2">reactive source2</template> 
<template name="template3">reactive source3</template> 
<template name="template4">reactive source4</template> 
<template name="template5">reactive source5</template> 

<template name="page1"> 
    {{> template1}} 
    {{> template2}} 
    {{> template3}} 
    {{> template4}} 
    {{> template5}} 
</template> 

如果每個單一模板中包含的內容更新,將它重新呈現整個頁面每次?我如何阻止這種情況發生?

在這種情況下我應該使用isolate嗎?

如果我綁定任何幫手,這些模板,如:

Template.template1.rendered = -> 
    console.log 'rendered at: ' + new Date().getTime() 

它將使至少5倍,因爲我有5個反應性來源。如果它們中的每一個都包含 被動列表,則它將被呈現docs.length時間。

我無法控制單個模板實例。

對不起,我的英語。

下面是與此相關的,我已經在GitHub上發佈的前一個問題:https://github.com/meteor/meteor/issues/435

回答

6
if each single template has content update it will rerender the whole page ? 

沒有,但它的所有父母的渲染事件將被觸發!實際上,渲染事件像dom事件一樣傳播。 當特定模板中的反應數據發生更改時,其所有子模板的內容將被重新渲染!但不是他的父母! 那麼什麼「常量」和「隔離」呢?我認爲找出它們的最好方法是做一些測試。 下面是一個簡單的測試: HTML:

<head> 
    <title>meteor_test</title> 
</head> 

<body> 
    {{> main}} 
</body> 

<template name="main"> 
    This is main template! 
    {{> subA}} 
    {{> subB}} 
</template> 

<template name="subA"> 
    <div> 
     ----This is subA! Input is surrounded by "constant"! 
     {{#constant}} <input /> {{/constant}} 
     Reactive data: {{reactiveData}} 
     {{> subA_A}} 
    </div> 
</template> 

<template name="subA_A"> 
    <div> 
     --------This is subA_A! 
     <input type="text" /> 
     Reactive data: {{reactiveData}} 
    </div> 
</template> 

<template name="subB"> 
    <div> 
     ----This is subB! Reactive data is surrounded by "isolate"! 
     <input type="text" /> 
     Reactive data: {{#isolate}} {{reactiveData}} {{/isolate}} 
     {{> subB_A}} 
    </div> 
</template> 

<template name="subB_A"> 
    <div> 
     --------This is subB_A! 
     <input type="text" /> 
     Reactive data: {{reactiveData}} 
     {{> subB_A_A}} 
    </div> 
</template> 

<template name="subB_A_A"> 
    <div> 
     ------------This is subB_A_A! 
     <input type="text" /> 
     Reactive data: {{reactiveData}} 
    </div> 
</template> 

JS:

if (Meteor.isClient) { 
    Template.main.rendered = function() { 
     console.log('main is rendered at %s', new Date()); 
    }; 

    Template.subA.helpers({ 
     reactiveData: function() { 
      return Session.get('subA'); 
     } 
    }); 
    Template.subA.rendered = function() { 
     console.log('subA is rendered at %s', new Date()); 
    }; 

    Template.subB.helpers({ 
     reactiveData: function () { 
      return Session.get('subB'); 
     } 
    }); 
    Template.subB.rendered = function() { 
     console.log('subB is rendered at %s', new Date()); 
    }; 

    Template.subA_A.helpers({ 
     reactiveData: function() { 
      return Session.get('subA_A'); 
     } 
    }); 
    Template.subA_A.rendered = function() { 
     console.log('subA_A is rendered at %s', new Date()); 
    }; 

    Template.subB_A.helpers({ 
     reactiveData: function() { 
      return Session.get('subB_A'); 
     } 
    }); 
    Template.subB_A.rendered = function() { 
     console.log('subB_A is rendered at %s', new Date()); 
    }; 

    Template.subB_A_A.helpers({ 
     reactiveData: function() { 
      return Session.get('subB_A_A'); 
     } 
    }); 
    Template.subB_A_A.rendered = function() { 
     console.log('subB_A_A is rendered at %s', new Date()); 
    }; 
} 

使用Chrome的/ Firebug的更改會話數據的控制檯,看看會發生什麼。注意當被動變化和呈現的事件是否被觸發時,這些輸入中輸入的文本是否會被清除(意味着被重新渲染)。

......對不起,我的英語也一樣^ _^

+0

的Template.foo.rendered回調被調用,但實際上沒有被重新渲染扔我一個循環。顯然,流星人都知道這個令人困惑的術語,並且已經在新的UI引擎中修復。見https://github.com/meteor/meteor/issues/1294 – alnafie

+0

#isolate,#constant和保留都已被刪除:https://github.com/meteor/meteor/wiki/Using-Blaze#no-更恆定分離或 - 保存 – Aaron

相關問題