81 lines
No EOL
15 KiB
HTML
81 lines
No EOL
15 KiB
HTML
<html><head><title>JSONDataModel.js</title><link rel="stylesheet" type="text/css" href="../style.css" media="screen"/></head><body><div class="hl-main"><pre>
|
|
</span><span class="hl-comment">/**
|
|
* @class YAHOO.ext.grid.JSONDataModel
|
|
* This is an implementation of a DataModel used by the Grid. It works
|
|
* with JSON data.
|
|
* <br>Example schema:
|
|
* <pre><code>
|
|
* var schema = {
|
|
* root: 'Results.Result',
|
|
* id: 'ASIN',
|
|
* fields: ['Author', 'Title', 'Manufacturer', 'ProductGroup']
|
|
* };
|
|
* </code></pre>
|
|
* @extends YAHOO.ext.grid.LoadableDataModel
|
|
* @constructor
|
|
*/
|
|
</span><span class="hl-identifier">YAHOO</span><span class="hl-default">.</span><span class="hl-identifier">ext</span><span class="hl-default">.</span><span class="hl-identifier">grid</span><span class="hl-default">.</span><span class="hl-identifier">JSONDataModel</span><span class="hl-default"> = </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">schema</span><span class="hl-brackets">){
|
|
</span><span class="hl-identifier">YAHOO</span><span class="hl-code">.</span><span class="hl-identifier">ext</span><span class="hl-code">.</span><span class="hl-identifier">grid</span><span class="hl-code">.</span><span class="hl-identifier">JSONDataModel</span><span class="hl-code">.</span><span class="hl-identifier">superclass</span><span class="hl-code">.</span><span class="hl-identifier">constructor</span><span class="hl-code">.</span><span class="hl-identifier">call</span><span class="hl-brackets">(</span><span class="hl-reserved">this</span><span class="hl-code">, </span><span class="hl-identifier">YAHOO</span><span class="hl-code">.</span><span class="hl-identifier">ext</span><span class="hl-code">.</span><span class="hl-identifier">grid</span><span class="hl-code">.</span><span class="hl-identifier">LoadableDataModel</span><span class="hl-code">.</span><span class="hl-identifier">JSON</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-comment">/**@private*/
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">schema</span><span class="hl-code"> = </span><span class="hl-identifier">schema</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-default">;
|
|
</span><span class="hl-identifier">YAHOO</span><span class="hl-default">.</span><span class="hl-identifier">extendX</span><span class="hl-brackets">(</span><span class="hl-identifier">YAHOO</span><span class="hl-code">.</span><span class="hl-identifier">ext</span><span class="hl-code">.</span><span class="hl-identifier">grid</span><span class="hl-code">.</span><span class="hl-identifier">JSONDataModel</span><span class="hl-code">, </span><span class="hl-identifier">YAHOO</span><span class="hl-code">.</span><span class="hl-identifier">ext</span><span class="hl-code">.</span><span class="hl-identifier">grid</span><span class="hl-code">.</span><span class="hl-identifier">LoadableDataModel</span><span class="hl-code">, </span><span class="hl-brackets">{
|
|
</span><span class="hl-comment">/**
|
|
* Overrides loadData in LoadableDataModel to process JSON data
|
|
* @param {Object} data The JSON object to load
|
|
* @param {Function} callback
|
|
*/
|
|
</span><span class="hl-identifier">loadData</span><span class="hl-code"> : </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">data</span><span class="hl-code">, </span><span class="hl-identifier">callback</span><span class="hl-code">, </span><span class="hl-identifier">keepExisting</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">idField</span><span class="hl-code"> = </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">schema</span><span class="hl-code">.</span><span class="hl-identifier">id</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">fields</span><span class="hl-code"> = </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">schema</span><span class="hl-code">.</span><span class="hl-identifier">fields</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">schema</span><span class="hl-code">.</span><span class="hl-identifier">totalProperty</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">v</span><span class="hl-code"> = </span><span class="hl-identifier">parseInt</span><span class="hl-brackets">(</span><span class="hl-identifier">eval</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">data.</span><span class="hl-quotes">'</span><span class="hl-code"> + </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">schema</span><span class="hl-code">.</span><span class="hl-identifier">totalProperty</span><span class="hl-brackets">)</span><span class="hl-code">, </span><span class="hl-number">10</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-code">!</span><span class="hl-identifier">isNaN</span><span class="hl-brackets">(</span><span class="hl-identifier">v</span><span class="hl-brackets">)){
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">totalCount</span><span class="hl-code"> = </span><span class="hl-identifier">v</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
}
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">rowData</span><span class="hl-code"> = </span><span class="hl-brackets">[]</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">try</span><span class="hl-brackets">{
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">root</span><span class="hl-code"> = </span><span class="hl-identifier">eval</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">data.</span><span class="hl-quotes">'</span><span class="hl-code"> + </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">schema</span><span class="hl-code">.</span><span class="hl-identifier">root</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">for</span><span class="hl-brackets">(</span><span class="hl-reserved">var </span><span class="hl-identifier">i</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code"> < </span><span class="hl-identifier">root</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code">++</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">node</span><span class="hl-code"> = </span><span class="hl-identifier">root</span><span class="hl-brackets">[</span><span class="hl-identifier">i</span><span class="hl-brackets">]</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">colData</span><span class="hl-code"> = </span><span class="hl-brackets">[]</span><span class="hl-code">;
|
|
</span><span class="hl-identifier">colData</span><span class="hl-code">.</span><span class="hl-identifier">node</span><span class="hl-code"> = </span><span class="hl-identifier">node</span><span class="hl-code">;
|
|
</span><span class="hl-identifier">colData</span><span class="hl-code">.</span><span class="hl-identifier">id</span><span class="hl-code"> = </span><span class="hl-brackets">(</span><span class="hl-reserved">typeof </span><span class="hl-identifier">node</span><span class="hl-brackets">[</span><span class="hl-identifier">idField</span><span class="hl-brackets">]</span><span class="hl-code"> != </span><span class="hl-quotes">'</span><span class="hl-string">undefined</span><span class="hl-quotes">'</span><span class="hl-code"> && </span><span class="hl-identifier">node</span><span class="hl-brackets">[</span><span class="hl-identifier">idField</span><span class="hl-brackets">]</span><span class="hl-code"> !== </span><span class="hl-quotes">''</span><span class="hl-code"> ? </span><span class="hl-identifier">node</span><span class="hl-brackets">[</span><span class="hl-identifier">idField</span><span class="hl-brackets">]</span><span class="hl-code"> : </span><span class="hl-builtin">String</span><span class="hl-brackets">(</span><span class="hl-identifier">i</span><span class="hl-brackets">))</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">for</span><span class="hl-brackets">(</span><span class="hl-reserved">var </span><span class="hl-identifier">j</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">j</span><span class="hl-code"> < </span><span class="hl-identifier">fields</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code">; </span><span class="hl-identifier">j</span><span class="hl-code">++</span><span class="hl-brackets">) {
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">val</span><span class="hl-code"> = </span><span class="hl-identifier">node</span><span class="hl-brackets">[</span><span class="hl-identifier">fields</span><span class="hl-brackets">[</span><span class="hl-identifier">j</span><span class="hl-brackets">]]</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-reserved">typeof </span><span class="hl-identifier">val</span><span class="hl-code"> == </span><span class="hl-quotes">'</span><span class="hl-string">undefined</span><span class="hl-quotes">'</span><span class="hl-brackets">){
|
|
</span><span class="hl-identifier">val</span><span class="hl-code"> = </span><span class="hl-quotes">''</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">preprocessors</span><span class="hl-brackets">[</span><span class="hl-identifier">j</span><span class="hl-brackets">]){
|
|
</span><span class="hl-identifier">val</span><span class="hl-code"> = </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">preprocessors</span><span class="hl-brackets">[</span><span class="hl-identifier">j</span><span class="hl-brackets">](</span><span class="hl-identifier">val</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
</span><span class="hl-identifier">colData</span><span class="hl-code">.</span><span class="hl-identifier">push</span><span class="hl-brackets">(</span><span class="hl-identifier">val</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
</span><span class="hl-identifier">rowData</span><span class="hl-code">.</span><span class="hl-identifier">push</span><span class="hl-brackets">(</span><span class="hl-identifier">colData</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-identifier">keepExisting</span><span class="hl-code"> !== </span><span class="hl-reserved">true</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">removeAll</span><span class="hl-brackets">()</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">addRows</span><span class="hl-brackets">(</span><span class="hl-identifier">rowData</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-reserved">typeof </span><span class="hl-identifier">callback</span><span class="hl-code"> == </span><span class="hl-quotes">'</span><span class="hl-string">function</span><span class="hl-quotes">'</span><span class="hl-brackets">){
|
|
</span><span class="hl-identifier">callback</span><span class="hl-brackets">(</span><span class="hl-reserved">this</span><span class="hl-code">, </span><span class="hl-reserved">true</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">fireLoadEvent</span><span class="hl-brackets">()</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-reserved">catch</span><span class="hl-brackets">(</span><span class="hl-identifier">e</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">fireLoadException</span><span class="hl-brackets">(</span><span class="hl-identifier">e</span><span class="hl-code">, </span><span class="hl-reserved">null</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-reserved">typeof </span><span class="hl-identifier">callback</span><span class="hl-code"> == </span><span class="hl-quotes">'</span><span class="hl-string">function</span><span class="hl-quotes">'</span><span class="hl-brackets">){
|
|
</span><span class="hl-identifier">callback</span><span class="hl-brackets">(</span><span class="hl-reserved">this</span><span class="hl-code">, </span><span class="hl-reserved">false</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
}
|
|
}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* Overrides getRowId in DefaultDataModel to return the ID value of the specified node.
|
|
* @param {Number} rowIndex
|
|
* @return {Number}
|
|
*/
|
|
</span><span class="hl-identifier">getRowId</span><span class="hl-code"> : </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">rowIndex</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">return this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-brackets">[</span><span class="hl-identifier">rowIndex</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">id</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
})</span><span class="hl-default">;</span></pre></div><hr>Copyright © 2006 Jack Slocum. All rights reserved.</body></html> |