Ich mag Dataitem in einer Liste erstellen, die wie folgt aussieht: Wie erstellt man komplexe Daten in Sencha touch 2.1?
aber ich bin nicht in der Lage Mitte vbox
Abschnitt mit 3 Komponenten zu machen. Ich verfolge dieses Beispiel: http://www.sencha.com/blog/dive-into-dataview-with-sencha-touch-2-beta-2/
Dies ist, wie ich meine Daten Artikel bin definieren:
Ext.define('MyTabApp.view.CartListItem', {
extend : 'Ext.dataview.component.DataItem',
alias : 'widget.cartlistitem',
requires: [
'Ext.Img'
],
config : {
cls: 'cart-list-item',
layout: {
type: 'hbox',
align: 'center'
},
image: true,
details: {
cls: 'x-details',
flex: 3,
},
pricing: {
cls: 'x-pricing',
flex: 1
},
removeButton: {
iconCls : 'delete',
iconMask : true,
ui : 'astonvilla',
style : 'margin-left: 5px; margin-top:10px; padding:5px;'
},
moveButton: {
iconCls : 'reply',
iconMask : true,
ui : 'astonvilla',
style : 'margin-left: 5px; margin-top:10px; padding:5px;'
},
editButton: {
iconCls : 'compose',
iconMask : true,
ui : 'astonvilla',
style : 'margin-left: 5px; margin-top:10px; padding:5px;'
},
dataMap: {
getImage: {
setSrc : 'itemImage'
},
getDetails: {
setItemTitle : 'title',
setQuantity : 'quantity'
},
getPricing: {
setHtml : 'totalPrice'
},
},
},
applyImage: function(config) {
return Ext.factory(config, Ext.Img, this.getImage());
},
updateImage: function(newImage, oldImage) {
if (newImage) {
this.add(newImage);
}
if (oldImage) {
this.remove(oldImage);
}
},
applyDetails: function(config) {
console.log("applyDetails");
var details = Ext.factory(config, MyTabApp.view.CartListItemDetails, this.getDetails());
console.log("applyDetails done");
console.log(details);
return details;
},
updateDetails: function(newDetails, oldDetails) {
console.log("updateDetails");
if (newDetails) {
this.add(newDetails);
}
if (oldDetails) {
this.remove(oldDetails);
}
},
applyPricing: function(config) {
return Ext.factory(config, Ext.Component, this.getPricing());
},
updatePricing: function(newPricing, oldPricing) {
if (newPricing) {
this.add(newPricing);
}
if (oldPricing) {
this.remove(oldPricing);
}
},
applyRemoveButton: function(config) {
return Ext.factory(config, Ext.Button, this.getRemoveButton());
},
updateRemoveButton: function(newRemoveButton, oldRemoveButton) {
if (oldRemoveButton) {
this.remove(oldRemoveButton);
}
if (newRemoveButton) {
// add an event listeners for the `tap` event onto the new button, and tell it to call the onNameButtonTap method
// when it happens
newRemoveButton.on('tap', this.onRemoveButtonTap, this);
this.add(newRemoveButton);
}
},
onRemoveButtonTap: function(button, e) {
var record = this.getRecord();
Ext.Msg.alert(
record.get('title'), // the title of the alert
"Id of this item is: " + record.get('itemId') // the message of the alert
);
},
applyEditButton: function(config) {
return Ext.factory(config, Ext.Button, this.getEditButton());
},
updateEditButton: function(newEditButton, oldEditButton) {
if (oldEditButton) {
this.remove(oldEditButton);
}
if (newEditButton) {
// add an event listeners for the `tap` event onto the new button, and tell it to call the onNameButtonTap method
// when it happens
newEditButton.on('tap', this.onEditButtonTap, this);
this.add(newEditButton);
}
},
onEditButtonTap: function(button, e) {
var record = this.getRecord();
Ext.Msg.alert(
record.get('title'), // the title of the alert
"Id of this item is: " + record.get('itemId') // the message of the alert
);
},
applyMoveButton: function(config) {
return Ext.factory(config, Ext.Button, this.getMoveButton());
},
updateMoveButton: function(newMoveButton, oldMoveButton) {
if (oldMoveButton) {
this.remove(oldMoveButton);
}
if (newMoveButton) {
// add an event listeners for the `tap` event onto the new button, and tell it to call the onNameButtonTap method
// when it happens
newMoveButton.on('tap', this.onMoveButtonTap, this);
this.add(newMoveButton);
}
},
onMoveButtonTap: function(button, e) {
var record = this.getRecord();
Ext.Msg.alert(
record.get('title'), // the title of the alert
"Id of this item is: " + record.get('itemId') // the message of the alert
);
}
});
Und das Mittelteil, die ich details
nenne ist definiert als benutzerdefinierte Ansicht mit vbox
Layout ist wie folgt definiert Dies wird Rendering Listenelemente mit Bild, Preis & horizontal ausgerichtete Tasten
Ext.define('MyTabApp.view.CartListItemDetails', {
extend : 'Ext.Component',
alias : 'widget.cartlistitemdetails',
config : {
cls : 'x-details',
flex : 3,
layout : 'vbox',
titleCell: null,
qtyCell: null,
items : [{
xtype : 'panel',
flex : 1,
itemId : 'titleCell',
html : 'blahblah'
},
{
xtype : 'component',
flex : 1,
itemId : 'qtyCell',
html : 'blahblah'
}],
},
setItemTitle : function(title){
// this.down('#titleCell').setHtml(title);
console.log(this.getItems());
this.getItems()[0].html = title;
},
setQuantity : function(qty){
// this.down('#qtyCell').setHtml(qty);
console.log(this.getItems());
this.getItems()[0].html = qty;
}
});
:. Der mittlere Abschnitt, der eine benutzerdefinierte Komponente ist, wird nicht gerendert. Wenn ich Element inspizieren ist es wie HTML generiert:
<div class="x-details x-layout-box-item x-flexed x-stretched" id="ext-cartlistitemdetails-1" style="-webkit-box-flex: 3;"></div>
wie können Sie sehen, es gibt nichts in diesem div ist und das ist, wie es gemacht wird:
Es scheint, ich bin in der Nähe weil setItemTitle
Methode aufgerufen wird, aber immer noch this.down('#titleCell').setHtml(title)
oder this.getItems()[0].html = title;
funktioniert nicht.
Nicht sicher bei allem, aber warum gibt es nur zwei Elemente in 'CartListItemDetails'? Außerdem, warum ist 'titleCell' ein' panel' und '' qtyCell' '' component''? Aber warum sollte man CartListItemDetails nicht einfach zu einem "Panel" mit HTML-Inhalten machen, die man mit CSS formatiert? – jakerella
würde ich es auch mit einer HTML-Vorlage machen und so CSS-magisch machen. Dann hätten Sie nur einen ItemTap-Listener in der Liste. In der Funktion, die der ItemTap-Listener aufruft, können Sie das Ziel des Tap-Events herausfinden und somit jede andere Funktion auslösen. –
@jakerella eigentlich wegen der Frustration Ich habe hinzugefügt/entfernt/geändert viele Dinge, wegen denen es 2 Elemente anstelle von 3 und auch das "Panel" & "Container". – ThinkFloyd