0

テンプレート化されたウィジェットを作成しています。このウィジェットでは、ComboBoxを使用してフォームを作成し、その中にJsonRestを入力しようとしています。

これは私がウィジェットに使用するコードです:

define( [ 
  'dojo/_base/declare', 
  'dijit/_WidgetBase', 
  'dijit/_TemplatedMixin', 
  'dijit/_WidgetsInTemplateMixin', 
  'dojo/text!./templates/PanelDesigner.html', 
  'dijit/form/TextBox', 
  'dijit/form/Form', 
  'dojo/store/JsonRest', 
  'dijit/form/ComboBox' 
], 

  function(declare, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, template,   JsonRest) { 
    worksector_store = new JsonRest({ 
      target: '/worksectors' 
    }); 

  return declare('ppc.panel_designer.PanelDesigner',[_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], { 
    templateString: template, 
    widgetsInTemplate: true 
  }); 
}); 

そして、これはロードされているテンプレートです:

<div id='${baseClass}' data-dojo-type='dijit/form/Form' data-dojo-id='${baseClass}'>
  <table>
    <tr>
      <td><label for:'name'>Name:</label></td>
      <td><input type='text' id='name' name='name' required='true' data-dojo-type='dijit/form/TextBox'/></td>
    </tr>
    <tr>
      <td><label for:'worksector'>Worksector:</label></td>
      <td><input id='worksector' name='worksector' data-dojo-type='dijit/form/ComboBox' data-dojo-props="store:worksector_store" /></td>
    </tr>
  </table>
</div>

しかし、ComboBoxを使おうとすると、常にエラーが発生します。

Uncaught TypeError: Object [Widget dijit.form.TextBox, dijit_form_TextBox_0] has no method 'query' 

私はしばらくの間探していましたが、まだ解決策を見つけていません。テンプレートからストアを削除し、declare関数のpostCreateメソッドでクエリメソッドを直接呼び出そうとしましたが、同じエラーが発生します。

前もって感謝します。マルセル

解決:

問題は、定義するために渡された関数の引数の順序がどのようになっているかでした。最初の引数は含めるオブジェクトの配列であり、2番目の引数は変数のリストを持つ関数です。

関数内の変数の順序は、渡された配列内のオブジェクトの順序と同じである必要があります。

したがって、ウィジェットのコードは次のようになります。

define( [
  'dojo/_base/declare',
  'dijit/_WidgetBase',
  'dijit/_TemplatedMixin',
  'dijit/_WidgetsInTemplateMixin',
  'dojo/text!./templates/PanelDesigner.html',
  'dojo/store/JsonRest',
  'dojo/store/Memory',
  'dijit/form/ComboBox',
  'dijit/form/Form',
  'dijit/form/TextBox'
],
function(declare, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, template, JsonRest, Memory, ComboBox) {
  worksector_store = new JsonRest({
    target: '/worksectors'
  });

  return declare('ppc.panel_designer.PanelDesigner',[_WidgetBase, _TemplatedMixin,     _WidgetsInTemplateMixin], {
    templateString: template,
    widgetsInTemplate: true,
  });
});
4

1 に答える 1

0

worksector_storeあなたの変数はテンプレート内に表示されていないと思います。ComboBox を宣言的に作成するだけでよいと思います。

define([..],function(..){
  var worksector_store = new JsonRest({});

  return declare('...',[deps],{
    buildRendering:function(){
      //do the other templated dom building
      this.inherited(arguments);
      this.comboBox = new CombBox({store:worksector_store});
    }
  });
});
于 2013-01-25T13:59:53.643 に答える