2015-03-12 2 views
1

Я пытаюсь создать идентификаторы для модели. В документации Ember говорится, что Ember автоматически создает идентификаторы для своих моделей.Автоматическое создание идентификаторов с Ember & Firebase

Но когда я передаю данные в Firebase и пытаюсь их отобразить, идентификаторы возвращаются не определены. Что-то не так с моим кодом?

<script type="text/x-handlebars" id="stack"> 
    <div class='stack'> 
    <div class="container"> 
    <div class="row"> 
     <div class="span12" style="text-align:center; margin: 0 auto;"> 

      {{#if isEditing}} 
      {{partial 'stack/edit'}} 
      <button {{action 'doneEditing'}}>Done</button> 
      {{else}} 
      <button {{action 'edit'}}>Edit</button> 
      {{/if}} 

     <h1>{{stack.title}}</h1> 
     <h2>at {{stack.date}} <small class='muted'>({{format-date date}})</small></h2> 

     <hr> 

     <div class='intro'> 
      {{stack.location}} 
     </div> 

     <div class='below-the-fold'> 
      {{stack.details}} 
     </div> 

...

App.Router.map(function() { 
    // put your routes here 
    this.resource('stacks'); 
    this.resource('stack', {path: 'stacks/:stack_id'}, function() { 
     this.route('edit'); 
     this.resource('comments', function() { 
      this.route('new'); 
     }) 
    }); 
    this.route('create'); 
    this.resource('groups'); 
    }); 

App.StackRoute = Ember.Route.extend({ 
    model: function(params) { 
     return stacks.findBy('id', params.stack_id); 
    } 
}); 



App.CreateController = Ember.ObjectController.extend({ 
    init: function() { 
     this.set('stack', Ember.Object.create()); 
    }, 
    actions: { 
     createStack: function() { 
      var newStack = this.store.createRecord('stack', { 
       title: this.get('stack.title'), 
       location: this.get('stack.location'), 
       date: new Date().getTime(), 
       details: this.get('stack.details'), 
      }); 

      newStack.save(); 

      alert('newStack.title' + " is ready!"); 
     }, 

     cancelStackCreation: function() { 
      this.sendAction('cancel'); 
      alert("Canceled stack creation."); 
     }, 
    } 
}); 


App.StackController = Ember.ArrayController.extend({ 
    isEditing: false, 

    actions: { 
     edit: function() { 
      this.set('isEditing', true); 
     }, 

     doneEditing: function() { 
      this.set('isEditing', false); 
     }, 
    } 
}); 
+1

Вы можете видеть, что дает эталонная база? –

+0

Firebase должна автоматически назначать идентификаторы для вас. – Dhaulagiri

+0

@Bloomfield Да, он генерирует id как «JkDmhXBoXbpvFnYd3hX» Я получил данные для отображения, но они не связаны с соответствующими идентификаторами. Как я могу ссылаться на URL-адрес для каждого идентификатора? – sunoceansand

ответ

1

При вызове this.store.createRecord() у вас есть "вариант", чтобы иметь id автогенерируемые (см here) В конечном счете, однако, что ответственность возлагается на adapter. Если ваш адаптер имеет метод generateIdForRecord() - это будет использоваться для создания идентификатора. Так, например, FixtureAdapter реализует этот метод следующим образом (см here):

generateIdForRecord: function(store) { 
    return "fixture-" + counter++; 
} 

Если вы используете FirebaseAdapter (this one) она не выглядит, как это генерируя id, так что вам нужно будет продлить его и сделайте это самостоятельно, если вы действительно хотите, чтобы эта функция выполнялась на клиенте. Но вам действительно нужно спросить себя, поступаете ли вы. ;) По умолчанию RestAdapter не генерирует идентификаторы для своих моделей.

+0

Спасибо. Я использую FirebaseAdapter. Я в порядке с идентификатором Firebase для меня, но я просто не знаю, как ссылаться на URL-адрес id для отображения соответствующих данных ... – sunoceansand

0

Моя проблема была решена с помощью

{{#link-to 'stack.index' this.stack.id}} 

я смог связать с конкретным URL на основе идентификатора.

Смежные вопросы