我在使用XTemplates和使用MVC结构时遇到了一些困难。我已经完成了一些教程并且他们自己有意义,但是当我尝试将它们应用到我想要实现的目标时,它并没有那么好用。
首先,我的应用程序包含TabBarMVC和几个视图。有些观点会有“子观点”。我从“布局”的角度来看应用程序。标签是标签,视图可以访问子视图。现在问题是将数据发送到子视图。
一个例子是我的Bill page to Detail页面。在帐单页面中,用户可以输入要分割帐单的总人数和人数。我的控制器获取两个参数并将它们分开并将它们存储在“来宾”对象中。我的来宾对象将是一个1-x个来宾对象的数组。 (根据要分割的数字)。
然后我将该对象发送到子视图中的更新方法以更新XTemplate但是没有发生。我可以提醒对象,并在调试器中查看数据,但我不知道如何更新Xtemplate。
这是控制器代码:
splitdetail: function(options)
{
if ( ! this.splitdetailView)
{
var totalBill = options.data['totalBill'];
var numGuests = options.data['splitBy'];
var totalPerGuest = totalBill / numGuests;
var guestObject = new Array();
var theGuest;
for (var i=0; i<numGuests; i++) {
theGuest = {amount: totalPerGuest}
guestObject.push(theGuest);
}
app.views.calculatorSplitDetail.updateWithRecord(guestObject);
this.splitdetailView = this.render({
xtype: 'CalculatorSplitDetail',
switchAnimation: { type: 'slide'}
});
}
this.application.viewport.setActiveItem(this.splitdetailView, 'slide');
},
这是我的拆分细节
var guestTemplate = new Ext.XTemplate(
'<tpl for=".">',
'<div class=" x-field guest-amount-row x-field-number x-label-align-left">',
'<div class="x-form-label" style="width: 30%; ">',
'<span>Total bill</span>',
'</div>',
'<div class="x-form-field-container">',
'<input type="number" name="totalGuestAmount" class="x-input-number" value="{amount}">',
'</div>',
'</div>',
'</tpl>'
);
app.views.CalculatorSplitDetail = Ext.extend(Ext.form.FormPanel, {
initComponent: function() {
Ext.apply(this, {
scroll: false,
items: [
guestTemplate,
]
});
app.views.CalculatorSplitDetail.superclass.initComponent.call(this);
},
styleHtmlContent: true,
baseCls: 'calculator-splitdetail-panel',
updateWithRecord: function(record) {
guestTemplate.apply(record);
alert(record[0].amount);
}
});
Ext.reg('CalculatorSplitDetail', app.views.CalculatorSplitDetail);
答案 0 :(得分:0)
guestTemplate
只是一个模板,而不是一个控件,因此无法自行刷新,但它可以为您生成新的html。因此,您需要做的就是使用新生成的html更新面板:
updateWithRecord: function(record) {
this.update(guestTemplate.apply(record));
alert(record[0].amount);
}