2017-08-12 8 views
0

J'essaie d'utiliser renderer config à l'intérieur Ext.column. J'ai deux états de champs dans le modèle; balanceok et lastbalance. Mais il donne cette erreur:Comment 'obtenir' un autre champ Modèle sur ExtJS 5.1.1

[W] XTemplate evaluation exception: getRecord is not defined 

Comment je peux afficher un autre champ avec la méthode get?

Modèle:

Ext.define('MultiDB.model.FolioModel', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'clientname', type: 'string'}, 
     {name: 'balanceok', type: 'bool'}, 
     {name: 'lastbalance', type: 'int'} 
    ] 

Panel Grille:

{ 
    dataIndex: 'balanceok', 
    flex: 1, 
    text: 'Balance', 
    renderer: function (value, record, store) { 
    if (value == 1) { 
     return "All Paid"; 
    } else { 
     return getRecord('lastbalance'); 
    } 
    } 
} 

Répondre

1

Je ne sais pas où vous avez trouvé getRecord, l'appel serait correct:

record.get('lastbalance'); 

En note secondaire, la vérification pour value == 1 est un peu étrange puisque le champ sera moulé à un booléen en raison du modèle.

+0

Bonjour encore @ evan-trimboli. Votre réponse a fonctionné facilement et j'ai simplement changé 'getRecord' en' record.get'. Réponse pour votre première question est ** Stackoverflow **. Avant de poser une question, je plonge profondément ici et j'essaie tous les exemples de blocs de code. Si ça ne marche toujours pas, alors je pose une question. Et s'il vous plaît lisez le commentaire ci-dessous que j'ai posté sur @ djmm187 pour comprendre que * situation étrange * vous avez remarqué. =) Merci beaucoup! –

+1

En spécifiant le 'type' dans la définition du modèle, cela signifie que la valeur provenant du serveur est convertie en une valeur booléenne, donc c'est' true/false'. Cela signifie que votre vérification serait juste: 'if (balanceok)' –

+0

Jusqu'ici Il est erroné d'assigner le type de champ comme 'bool'. Alors qu'est-ce qui serait plus faisable pour ma situation? Il n'y a que «0» et «1» pour la réponse du serveur! Est-ce que je peux l'assigner à 'int'? - * Eh bien, j'ai essayé et ça marche sans aucun problème pour l'instant! * –

3

Renderer fournit déjà un argument d'enregistrement. Vous pouvez utiliser getRecord lorsque vous vous concentrez sur une cellule de la grille, mais il semble que vous n'en ayez pas besoin dans le cas d'utilisation décrit ci-dessus. Il semblerait que vous ayez un peu perdu les arguments du moteur de rendu, ce qui explique peut-être pourquoi vous rencontrez un problème lors de la vérification et de la récupération de la valeur.

Si vous mettez à jour votre renderer colonne de: renderer: function (value, record, store) { ... } à: renderer: function (value, metaData, record, rowIndex, colIndex, store, view) { ... } Vous pouvez voir une description complète de méthode render ici: http://docs.sencha.com/extjs/5.1.1/api/Ext.grid.column.Column.html#cfg-renderer

Jetez un oeil au violon ci-dessous un exemple de travail qui vous aider à démarrer: https://fiddle.sencha.com/#view/editor&fiddle/251r

+0

Cher @ djmm187 merci pour votre réponse. J'ai vérifié le violon et l'implémentation, mais cela n'a pas fonctionné comme vous l'avez créé, donc j'ai dû changer quelques choses. La raison en est que le champ 'balanceok' est une réponse à 0 ou 1 du serveur. Donc la démo que j'ai créée est un comportement comme: * si c'est 1 alors "All Paid", sinon donnez-moi le 'lastbalance' *. Ainsi je me suis demandé! Est-ce une erreur d'attribuer 'bool' à 'balanceok'? –

+1

hum .. javascript devrait implicitement eval 0,1 à False, True dans l'expression, avec extjs cast la propriété du modèle au type assigné (au moins dans ce cas). Vous pouvez également voir ceci avec les types de retour 'checkboxfield' 0,1. Mais ce ne serait pas une mauvaise idée de mettre à jour le modèle pour être aussi explicite que possible. Explicite est toujours mieux que implicite. :) – djmm187