/* Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ if(!dojo._hasResource["dojo.data.api.Write"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo.data.api.Write"] = true; dojo.provide("dojo.data.api.Write"); dojo.require("dojo.data.api.Read"); dojo.declare("dojo.data.api.Write", dojo.data.api.Read, { // summary: // This is an abstract API that data provider implementations conform to. // This file defines function signatures and intentionally leaves all the // functionss unimplemented. getFeatures: function(){ // summary: // See dojo.data.api.Read.getFeatures() return { 'dojo.data.api.Read': true, 'dojo.data.api.Write': true }; }, newItem: function(/* Object? */ keywordArgs, /*Object?*/ parentInfo){ // summary: // Returns a newly created item. Sets the attributes of the new // item based on the *keywordArgs* provided. In general, the attribute // names in the keywords become the attributes in the new item and as for // the attribute values in keywordArgs, they become the values of the attributes // in the new item. In addition, for stores that support hierarchical item // creation, an optional second parameter is accepted that defines what item is the parent // of the new item and what attribute of that item should the new item be assigned to. // In general, this will assume that the attribute targetted is multi-valued and a new item // is appended onto the list of values for that attribute. // // keywordArgs: // A javascript object defining the initial content of the item as a set of JavaScript 'property name: value' pairs. // parentInfo: // An optional javascript object defining what item is the parent of this item (in a hierarchical store. Not all stores do hierarchical items), // and what attribute of that parent to assign the new item to. If this is present, and the attribute specified // is a multi-valued attribute, it will append this item into the array of values for that attribute. The structure // of the object is as follows: // { // parent: someItem, // attribute: "attribute-name-string" // } // // exceptions: // Throws an exception if *keywordArgs* is a string or a number or // anything other than a simple anonymous object. // Throws an exception if the item in parentInfo is not an item from the store // or if the attribute isn't an attribute name string. // example: // | var kermit = store.newItem({name: "Kermit", color:[blue, green]}); var newItem; throw new Error('Unimplemented API: dojo.data.api.Write.newItem'); return newItem; // item }, deleteItem: function(/* item */ item){ // summary: // Deletes an item from the store. // // item: // The item to delete. // // exceptions: // Throws an exception if the argument *item* is not an item // (if store.isItem(item) returns false). // example: // | var success = store.deleteItem(kermit); throw new Error('Unimplemented API: dojo.data.api.Write.deleteItem'); return false; // boolean }, setValue: function( /* item */ item, /* string */ attribute, /* almost anything */ value){ // summary: // Sets the value of an attribute on an item. // Replaces any previous value or values. // // item: // The item to modify. // attribute: // The attribute of the item to change represented as a string name. // value: // The value to assign to the item. // // exceptions: // Throws an exception if *item* is not an item, or if *attribute* // is neither an attribute object or a string. // Throws an exception if *value* is undefined. // example: // | var success = store.set(kermit, "color", "green"); throw new Error('Unimplemented API: dojo.data.api.Write.setValue'); return false; // boolean }, setValues: function(/* item */ item, /* string */ attribute, /* array */ values){ // summary: // Adds each value in the *values* array as a value of the given // attribute on the given item. // Replaces any previous value or values. // Calling store.setValues(x, y, []) (with *values* as an empty array) has // the same effect as calling store.unsetAttribute(x, y). // // item: // The item to modify. // attribute: // The attribute of the item to change represented as a string name. // values: // An array of values to assign to the attribute.. // // exceptions: // Throws an exception if *values* is not an array, if *item* is not an // item, or if *attribute* is neither an attribute object or a string. // example: // | var success = store.setValues(kermit, "color", ["green", "aqua"]); // | success = store.setValues(kermit, "color", []); // | if (success) {assert(!store.hasAttribute(kermit, "color"));} throw new Error('Unimplemented API: dojo.data.api.Write.setValues'); return false; // boolean }, unsetAttribute: function( /* item */ item, /* string */ attribute){ // summary: // Deletes all the values of an attribute on an item. // // item: // The item to modify. // attribute: // The attribute of the item to unset represented as a string. // // exceptions: // Throws an exception if *item* is not an item, or if *attribute* // is neither an attribute object or a string. // example: // | var success = store.unsetAttribute(kermit, "color"); // | if (success) {assert(!store.hasAttribute(kermit, "color"));} throw new Error('Unimplemented API: dojo.data.api.Write.clear'); return false; // boolean }, save: function(/* object */ keywordArgs){ // summary: // Saves to the server all the changes that have been made locally. // The save operation may take some time and is generally performed // in an asynchronous fashion. The outcome of the save action is // is passed into the set of supported callbacks for the save. // // keywordArgs: // { // onComplete: function // onError: function // scope: object // } // // The *onComplete* parameter. // function(); // // If an onComplete callback function is provided, the callback function // will be called just once, after the save has completed. No parameters // are generally passed to the onComplete. // // The *onError* parameter. // function(errorData); // // If an onError callback function is provided, the callback function // will be called if there is any sort of error while attempting to // execute the save. The onError function will be based one parameter, the // error. // // The *scope* parameter. // If a scope object is provided, all of the callback function ( // onComplete, onError, etc) will be invoked in the context of the scope // object. In the body of the callback function, the value of the "this" // keyword will be the scope object. If no scope object is provided, // the callback functions will be called in the context of dojo.global. // For example, onComplete.call(scope) vs. // onComplete.call(dojo.global) // // returns: // Nothing. Since the saves are generally asynchronous, there is // no need to return anything. All results are passed via callbacks. // example: // | store.save({onComplete: onSave}); // | store.save({scope: fooObj, onComplete: onSave, onError: saveFailed}); throw new Error('Unimplemented API: dojo.data.api.Write.save'); }, revert: function(){ // summary: // Discards any unsaved changes. // description: // Discards any unsaved changes. // // example: // | var success = store.revert(); throw new Error('Unimplemented API: dojo.data.api.Write.revert'); return false; // boolean }, isDirty: function(/* item? */ item){ // summary: // Given an item, isDirty() returns true if the item has been modified // since the last save(). If isDirty() is called with no *item* argument, // then this function returns true if any item has been modified since // the last save(). // // item: // The item to check. // // exceptions: // Throws an exception if isDirty() is passed an argument and the // argument is not an item. // example: // | var trueOrFalse = store.isDirty(kermit); // true if kermit is dirty // | var trueOrFalse = store.isDirty(); // true if any item is dirty throw new Error('Unimplemented API: dojo.data.api.Write.isDirty'); return false; // boolean } }); }