2014-07-02 76 views
2

我創建了一個基於widget模板的一部分等,道場只更新模板

<div class="content"> 
    <div> 
     <!-- rest of content--> 
    </div> 
    <div class="col-md-6"> 
     <div class="panel" data-dojo-attach-point="sysinfo"> 
       <ul class="col-md-12 stats"> 
        <li class="stat col-md-3 col-sm-3 col-xs-6">Host:</br> <span><b class="value">{{hname}}</b></span> 
        </li> 
        <li class="stat col-md-3 col-sm-3 col-xs-6"># CPU:</br> <span><b class="value">{{cpu}}</b></span> 
        </li> 
       </ul> 
     </div> 
    </div> 
</div> 

如何更新SYSINFO的唯一內容?

到現在我在做什麼,

var widget = this; 
widget.template = new dtl.Template(widget.templateString); 
var template = widget.template; 
template.update(node, stats); // but it update complete content as node == content. I just want to refresh sysinfo. 

我也試過,

template.update(this.sysinfo, stats); // but it throws exceptions 

任何想法?

+0

你的widget的代碼中,你需要設置一個設置功能,參見[這裏](http://dojotoolkit.org/documentation/tutorials/1.9/recipes/custom_widget /),然後使用setter函數更新sysinfo內容。 sysinfo將作爲您的窗口代碼中的變量提供。在你的setter函數中,你可以使用像'_setSysinfo:function(argument){sysinfo.innerHtml = argument}'這樣的東西。 setter函數將被調用,例如'widget.Sysinfo(stats);' – frank

+0

@frank我們不能'template.update(node,context)' –

+0

該模板只有在解析器解析後纔可用。解析器將模板轉換爲DOM節點。沒有更新模板的更新方法。附加點屬性允許您指定解析器在創建widget時創建的變量的名稱,該名稱可用於manupilation。你有沒有看過之前評論中提供的鏈接? – frank

回答

3

據我所見,當您按照文檔中的建議使用dojox/dtl/_Templated時,沒有update()函數可用。

如果你真的希望某些事情,你將不得不手動定義模板,並呈現一個(和更換連接點),例如:

var subtemplate = "<ul data-dojo-attach-point='sysinfo'>{% for item in list %}<li>{{item}}</li>{% endfor %}</ul>"; 
var template = "<div><h1>{{title}}</h1>" + subtemplate + "</div>"; 

var CustomList = declare("custom/List", [ _WidgetBase, _Templated, _DomTemplated ], { 
    templateString: template, 
    subTemplate: new dtl.Template(subtemplate), 
    title: "Fruits", 
    list: [ 'Apple', 'Banana', 'Lemon' ], 
    _setListAttr: function(list) { 
     this.list = list; 
     this.sysinfo = domConstruct.place(this.subTemplate.render(new dtl.Context(this)), this.sysinfo, "replace"); 
    }, 
    _getListAttr: function(list) { 
     return this.list; 
    } 
}); 

通常情況下,如果你想更新模板當列表被設置時,您可以使用_setListAttr()函數中的this.render()來更新整個模板。

但是,正如你可以在_setListAttr()函數中看到的,我用新提供的Django模板替換了一個附加點。

這會導致只更新模板的那部分內容,而不是整個模板。所以{{title}}將保持原來的價值,即使改變了。

完整的例子可以的jsfiddle發現:http://jsfiddle.net/pb3k3/

+0

你可以看看@ http://dojotoolkit.org/reference- guide/1.10/dojox/dtl.html#the-update-function和http://dojotoolkit.org/reference-guide/1.10/dojox/dtl.html#use-dojo-query –

+1

該函數的確存在於dojox/dtl/Template「,但是當您使用小部件時,您從'dojox/dtl/_Templated'繼承,它會自動執行模板渲染,並且不會引用實際模板。所以你沒有合適的模板可以使用,因爲它集成在'dojox/dtl/_Templated'模塊中,當你用'dojox/dtl'定義小部件時,你應該使用它。 – g00glen00b

+0

我想得到你的一點幫助......你可以加入我的聊天室嗎?我爲我們創建了一個空間[here](http://chat.stackoverflow.com/rooms/56762/dojo-starters) –