これまでのヘルプで、Dojo dgridが動作するようになりました。それを私の休憩サービスからのデータにどのように結びつけるかを考え出しました。dgrid(onDemandGrid)は初めてボタンをクリックするとロードされますが、2回目のボタンのエラーはクリックされます
ここで、入力ボックス、ボタンを追加しました。すべてのロジックがボタンクリックで発生します。しかし、入力欄で同じ入力値であっても、ボタンを2回目にクリックすると、エラーが発生します。
ERROR:
はTypeError:StoreMixin.jsに未定義のプロパティ '要素' を読み込めません:絵を含む33
私console.logsを見ることができるので、私はこれを読んでHow To reset the OnDemandGridですが、グリッドが存在するかどうかを確認して別のロジックを確認する必要がありますか?毎回新しいものを「新しくする」ことはできないのですか?
CODE:
<div data-dojo-type="dijit/layout/ContentPane" data-dojo-props='title:"CustomersGrid"'>
<label for="lastnameStartsWith">Lastname Starts With:</label>
<input id="lastnameStartsWith" type="text" name="lastnameStartsWith" value="Wag"
data-dojo-type="dijit/form/TextBox"
data-dojo-props="trim:true, propercase:true" />
<br />
<br />
<button id="queryStudentsButton" data-dojo-type="dijit/form/Button"
data-dojo-type="dijit/form/Button"
data-dojo-props="iconClass:'dijitIconTask'">
<span>Query</span>
<script type='dojo/on' data-dojo-event='click'>
require([
'dstore/RequestMemory',
'dstore/Memory',
'dgrid/OnDemandGrid'
], function (RequestMemory, Memory, OnDemandGrid) {
var url = '../students/' + dojo.byId('lastnameStartsWith').value;
console.log("query students for dataGrid latsnameStartsWith:" + dojo.byId('lastnameStartsWith').value);
require(['dojo/request'], function(request){
request.get(url,
{headers: {"Content-Type": 'application/json',
"username": securityConfig.username,
"password": securityConfig.password}}
)
.then(function(response){
//console.log("string response=" + response);
var respJSON = JSON.parse(response);
var respDataForDGrid = respJSON.recordset;
console.log("got respJSON back, num rows= " + respDataForDGrid.length);
//================================================
// Create an instance of OnDemandGrid referencing the store
console.log("Debug1");
var grid2 = new OnDemandGrid({
collection: new Memory({ data: respDataForDGrid }),
columns: {
student_id: 'ID',
student_firstname: 'First Name',
student_lastname: 'Last Name',
student_city: 'City',
student_state: 'State',
student_zip: 'Zip'
}
}, 'grid2');
console.log("Debug2");
grid2.startup();
console.log("Debug3");
},
function(error){
console.log("Error=" + error);
//dom.byId('studentFeedback').value += response;
});
});
});
</script>
</button>
<h2>My demoGrid - From JSON RestService (Database)</h2>
<div id='grid2'></div>
</div>
パート2から
私はこのページにあなたのコードとコードの組み合わせを試してみました: How To reset the OnDemandGrid
if (grid2Registered){
console.log("reuse existing grid");
grid2Registered.set('collection', memStore);
// refresh: clear the grid and re-queries the store for data.
grid2Registered.refresh();
}
else{...
Doc here(https://github.com/SitePen/dgrid/blob/v0.4.3/doc/components/core-components/OnDemandList-and-OnDemandGrid.md)のコメント:
Clears the grid and re-queries the store for data. If keepScrollPosition is true on either the instance or the options passed to refresh, an attempt will be made to preserve the current scroll position. OnDemandList returns a promise from refresh, which resolves when items in view finish rendering. The promise resolves with the QueryResults that were rendered.
グリッドがすでに作成されている場合は、構造/列が同じであれば、新しいストアでグリッドをリフレッシュすることをおすすめします(少なくともこれは私が行うことです)。このようにして、クエリがあるたびにグリッドを作成するオーバーヘッドを回避できます。 –
これはどうやって実装するのですか?カウンターを持っていますか?または、私のgrid2が以前に定義されているかどうかをチェックする方法をチェックしますか? – NealWalters
テンプレート化されたアプローチ、つまりhtmlでウィジェットを定義する場合は、data-dojo-attach-pointを使用してグリッドを参照できます。プログラム的なアプローチをとっている場合は、IDを割り当てることができます(idは、使用するdijitごとに一意でなければならないことに注意してください)、dijit.byId( 'yourId')と呼んでください。 –