2015-02-09 3 views
0

Я работаю над простым CRUD-приложением, используя ember js. У меня есть шаблон с формой ввода, которая отправляет данные на сервер, а сервер отвечает успешным ответом.Обновление шаблона с ответом в Ember после создания/обновления action

данные формы ввода: «пользователь»: {«id»: 1, «name»: «John»};
ответ сервера: {"сообщение": "Создано успешно", "nextId": 2}.

Я хочу отобразить сообщение об успехе на том же шаблоне (один с формой ввода). Поскольку шаблон относится к модели пользователя, а модель пользователя не имеет атрибута сообщения. Как это можно сделать? Пожалуйста помоги.

Вот мой код:

var Manager = Ember.Application.create(); 

Manager.Router.map(function() { 
    this.resource('users'); 
    this.resource('user', {path: '/users/:user_id'}); 
    this.resource('home', {path: '/'}); 
}); 


Manager.UserRoute = Ember.Route.extend({ 
    model: function(params) { 
     return jQuery.getJSON("http://localhost:8085/users/"+ params.user_id); 
    }, 

    actions :{ 
     insert : function(){ 
      var user = this.modelFor("User"); 
      $.ajax({ 
       url: "http://localhost:8085/Users", 
       data: JSON.stringify(user), 
       type: "POST", 
       contentType: "application/json", 
      }) 
      .done(function(data){ 
      //set data.message to display on UI 
      }) 
     } 
    } 
}); 

и мой шаблон выглядит следующим образом:

<script type="text/x-handlebars" data-template-name="user"> 
<form class="form-horizontal" role="form" {{action "insert" on="submit"}}> 
    <div class="form-group"> 
     <label for="userId" class="control-label col-xs-2">User Id</label> 
      <div class="col-xs-4 input-group"> 
       {{input type="number" value=_id class="form-control" id="userId" placeholder="Identity"}} 
      </div> 
    </div> 

    <div class="form-group"> 
     <label for="name" class="control-label col-xs-2">Name</label> 
      <div class="col-xs-4 input-group"> 
       {{input type="text" value=name class="form-control" id="name" placeholder="Name"}} 
      </div> 
    </div> 

    {{#if message}} 
     <div class="alert alert-success input-group" role="alert">{{message}}</div> 
    {{/if}} 

    <div class="form-group button-center"> 
     <button type="submit" class="btn btn-default">Submit</button> 
    </div> 
</form> 
</script> 
+0

Можете ли вы предоставить больше кода? Шаблоны, контроллеры и т. Д.? –

+0

@Oren, я добавил свой шаблон и js. – ans7991

ответ

0

Установите message свойство на контроллере в ответ, что возвращается.

actions :{ 
     insert : function(){ 
      var user = this.modelFor("User"); 
      var self = this; 
      $.ajax({ 
       url: "http://localhost:8085/Users", 
       data: JSON.stringify(user), 
       type: "POST", 
       contentType: "application/json", 
      }) 
      .done(function(data){ 
       //set data.message to display on UI 
       self.controllerFor('user').set('message', data.message); 
      }) 
     } 
    } 
+0

спасибо за ответ. Я попробовал это, но это добавляет атрибут «сообщение» в пользовательской модели, чего я не хочу. – ans7991

+0

@jcena - это настройка свойства сообщения в пользовательском контроллере, а не в пользовательской модели. Ваш шаблон привязан к свойству на контроллере. Способ работы ember теперь заключается в том, что контроллер будет проксировать свойство на модели, если контроллер не содержит свойство с тем же именем. Является ли поведение ожидаемым, когда вы используете опубликованную реализацию? –