मैं this समाधान है, जहां आप सिर्फ तरीकों कि मॉडल को लाते समय के लिए नहीं कर रहे हैं के लिए अपनी खुद की ajax कॉल बनाने के द्वारा प्रेरित हुआ:
function setDefaultUrlOptionByMethod(syncFunc)
return function sync (method, model, options) {
options = options || {};
if (!options.url)
options.url = _.result(model, method + 'Url'); // Let Backbone.sync handle model.url fallback value
return syncFunc.call(this, method, model, options);
}
}
तो फिर तुम साथ मॉडल को परिभाषित कर सकते हैं। यहाँ इसके बारे में एक कांट छांट संस्करण है:
var Backbone = require("backbone");
var $ = require("jquery");
var _ = require("underscore");
function _request(url, method, data, callback) {
$.ajax({
url: url,
contentType: "application/json",
dataType: "json",
type: method,
data: JSON.stringify(data),
success: function (response) {
if (!response.error) {
if (callback && _.isFunction(callback.success)) {
callback.success(response);
}
} else {
if (callback && _.isFunction(callback.error)) {
callback.error(response);
}
}
},
error: function(mod, response){
if (callback && _.isFunction(callback.error)) {
callback.error(response);
}
}
});
}
var User = Backbone.Model.extend({
initialize: function() {
_.bindAll(this, "login", "logout", "signup");
},
login: function (data, callback) {
_request("api/auth/login", "POST", data, callback);
},
logout: function (callback) {
if (this.isLoggedIn()) {
_request("api/auth/logout", "GET", null, callback);
}
},
signup: function (data, callback) {
_request(url, "POST", data, callback);
},
url: "api/auth/user"
});
module.exports = User;
और फिर आप इसे इस तरह उपयोग कर सकते हैं:
var user = new User();
// user signup
user.signup(data, {
success: function (response) {
// signup success
}
});
// user login
user.login(data, {
success: function (response) {
// login success
}
});
// user logout
user.login({
success: function (response) {
// logout success
}
});
// fetch user details
user.fetch({
success: function() {
// logged in, go to home
window.location.hash = "";
},
error: function() {
// logged out, go to signin
window.location.hash = "signin";
}
});
अच्छा समाधान। 'विकल्प = विकल्प || के बजाय {}; ', आपको' विकल्प || का उपयोग करना चाहिए (विकल्प = {}); 'अनावश्यक पुनर्मूल्यांकन से बचने के लिए। –
@BrianNickel मैं मानता हूं कि आपका कोड अधिक अनुकूलित है लेकिन मैं इसे उत्तर में शामिल करने के लिए थोड़ा सा आरक्षित हूं क्योंकि JSLint/JSHint उपकरण इसे एक समस्या के रूप में चिह्नित कर रहे हैं और मेरी राय में इसे पढ़ने में थोड़ा मुश्किल है ... लेकिन मैं आपको +1 दिया क्योंकि यह ध्यान देने योग्य है :)। – kubetz
धन्यवाद यह बहुत ही dzejkej यह इंगित करने के लिए कि यह पहली बार मॉडल की सिंक विधि को देखेगा, मैंने इसे पूरी तरह से याद किया :) धन्यवाद @ ब्रियन निकल इसे भी इंगित करने के लिए :) – panosru