Dojo只更新模板的一部分
我创建了一个基于小部件的模板,比如Dojo只更新模板的一部分,dojo,Dojo,我创建了一个基于小部件的模板,比如 <div class="content"> <div> <!-- rest of content--> </div> <div class="col-md-6"> <div class="panel" data-dojo-attach-point="sysinfo"> <ul class="col
<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>
我也试过,
template.update(this.sysinfo, stats); // but it throws exceptions
有什么想法吗?据我所知,当您使用文档中建议的
dojox/dtl/\u模板化的时,没有可用的update()
函数
如果确实需要某些内容,则必须手动定义模板并渲染该模板(并替换附着点),例如:
var subtemplate=“{%for list%}- {{{item}}
{%endfor%}
”;
var template=“{title}}”+子模板+”;
var CustomList=declare(“custom/List”,[\u WidgetBase,\u Templated,\u domtplated]{
templateString:template,
子模板:新的dtl.模板(子模板),
标题:“水果”,
列表:[“苹果”、“香蕉”、“柠檬”],
_setListAttr:函数(列表){
this.list=列表;
this.sysinfo=domConstruct.place(this.subTemplate.render(new dtl.Context(this)),this.sysinfo,“replace”);
},
_getListAttr:函数(列表){
返回此.list;
}
});
通常,如果要在设置列表时更新模板,可以在\u setListAttr()
函数中使用this.render()
来更新整个模板
但是,正如您在\u setListAttr()
函数中看到的,我正在用新呈现的Django模板替换附着点
这只会更新模板的一部分,而不是整个模板。因此,{{title}}
将保持原始值,即使更改
可以在JSFiddle上找到完整的示例:在小部件代码中,您需要设置setter函数,请参阅以了解详细信息,然后使用setter函数更新sysinfo内容。sysinfo将作为widge代码中的变量提供。然后,在setter函数中,您可以使用如下内容,例如\u setSysinfo:function(argument){sysinfo.innerHtml=argument}
。setter函数将被调用,例如widget.Sysinfo(stats)
@frank cant我们不能模板。更新(节点、上下文)
模板只有在解析器解析后才可用。解析器将模板转换为DOM节点。没有更新这样的方法来更新模板。attach point属性允许您指定解析器在创建小部件时将创建的变量的名称,该变量可用于制造。你看过上一篇评论中提供的链接了吗?@frank???。你也可以在这里看一下,你能不能请看一下@这个函数确实存在于dojox/dtl/Template
上,但是当你使用小部件时,您继承的是dojox/dtl/_Templated
,它自动化了模板呈现,并且没有对实际模板的引用。因此,您没有有效的模板可供使用,因为它集成在dojox/dtl/_Templated
模块中,当您使用dojox/dtl
定义小部件时,应该使用该模块。我需要您的一些帮助。您可以加入我的聊天吗?我已经为我们创建了一个聊天室,我正在聊天,但是,我不知道dojox/dtl
,因此如果您需要帮助,我恐怕无法进一步帮助您。
template.update(this.sysinfo, stats); // but it throws exceptions