Создание на лету URL для моделей Backbone.js - PullRequest
0 голосов
/ 19 февраля 2012

У меня есть пара решений (скорее назовите их хаки), но я ищу элегантные решения проблемы. Вот проблема, пожалуйста, пройдите медленно

Я получил WebMethods на странице index.aspx, на которую отправляются запросы ajax (create, update, delete). один веб-метод не может обрабатывать все эти виды операций , поэтому для модели Person существует 3 метода, а именно

  1. CreatePerson (attributes)
  2. UpdatePerson (attributes)
  3. DeletePerson(personId)

следовательно, я использую хакерский процесс, как показано ниже, имена функций javascript соответствуют соответствующим методам на сервере

CreatePerson:function(){

model.url = "/CreatePerson";

},
UpdatePerson:function(){

model.url = "/UpdatePerson";

},
DeletePerson:function(){

model.url = "/DeletePerson";

}

описанные выше методы объявляются в представлениях, которые отображают модель Person. urlRoot для модели - index.aspx, следовательно, вызовы ajax будут перенаправлены на метод CreatePerson внутри index.aspx при выполнении операции create i.e index.aspx / CreatePerson

Если я делегирую функцию Sync, она переопределит все модели в приложении js, чего я не хочу.

Вопрос

Можно ли как-нибудь подготовить URL-адрес в соответствии с конечной точкой модели, прежде чем будет сделан запрос ajax при использовании Backbone.js со страницами asp.net?

1 Ответ

4 голосов
/ 19 февраля 2012

Вам следует перезаписать метод sync вашей коллекции, если она у вас есть, или модель, если вы работаете с одной моделью.И затем, в зависимости от того, было ли это создание, обновление или уничтожение, измените URL соответствующим образом и вызовите синхронизацию Backbone, передавая все параметры дальше, в то время как правильный URL-адрес установлен.

var Model = Backbone.Model.extend({

    ...

    sync: function(method, model, options) {

      // here method param can be either "read", "create", "update", "destroy"
      // set your url based on its value

      Backbone.sync.call(this, method, this, options); 
      // if your super class had custom sync as well you'd have to call 
      // Model.__super__.sync.call(...)
    }

});

Я не программист ASP, но неВозможно ли иметь интерфейс REST с .NET?делает вещи намного проще:)

...