2013-03-08 70 views
4

我試圖引導與Ember 1.0.0-RC1的小型應用程序。應用程序將使用圖像做一些事情。我沒有任何應用程序的後端,所以我試圖在我已經嵌入到網頁源代碼中的一些JSON上使用FixtureAdapter。如何在Ember.js中將默認商店設置爲FixtureAdapter?

不幸的是,我似乎無法正確掛鉤的商店。我不斷收到有關需要設置YourAppName.Store的錯誤。

Uncaught Error: assertion failed: Your application does not have a 'Store' property defined. Attempts to call 'all' on model classes will fail. Please provide one as with 'YourAppName.Store = DS.Store.extend()'

但除非我已經完全錯過了一些東西,我沒有將它設置:

window.YIH = Ember.Application.create(); 

YIH.Photo = DS.Model.extend({ 
    url: DS.attr('string'), 
}); 
YIH.Photo.FIXTURES = JSON.parse(document.getElementById('images').innerHTML); 
YIH.Store = DS.Store.extend({ 
    revision: 12, 
    adapter: DS.FixtureAdapter 
}); 

YIH.photoController = Em.ArrayController.create({ 
    content: YIH.Photo.all(), // blows up 
}) 

我砍死周圍試圖使這項工作設置其他屬性,但無濟於事。

+0

http://emberjs.com/guides/getting-started/using-fixtures/ – hiwaylon 2013-11-30 17:25:46

回答

8

更新:小提琴現在使用灰燼RC2與Ember,數據啓12

你不需要create控制器,只需將控制器類和extend無論從Ember.ArrayController的集合或Ember.ObjectController追加了單個對象。

YIH.PhotosController = Em.ArrayController.extend(); 
YIH.PhotosPhotoController = Em.ObjectController.extend(); 

Ember將實例化這些控制器並在整個應用程序生命週期中管理它們。

要設置與FixtureAdapter商店,這樣做:

YIH.Store = DS.Store.extend({ 
    revision: 12, 
    adapter: 'DS.FixtureAdapter' 
}); 

要設置你的控制器的content,建議通過路由做,如下所示:

YIH.Router.map(function() { 
    this.resource('photos', function() { 
     this.route('photo', { path: ':photo_id' }); 
    }); 
}); 

YIH.IndexRoute = Em.Route.extend({ 
    redirect: function() { 
     this.transitionTo('photos'); 
    } 
}); 

YIH.PhotosRoute = Em.Route.extend({ 
    model: function() { 
     return YIH.Photo.find(); 
    } 
}); 

YIH.PhotosPhotoRoute = Em.Route.extend({ 
    model: function(params) { 
     return YIH.Photo.find(params.photo_id); 
    } 
}); 

的控制器將獲得model通過setupController被烤成Route,即使你不寫它。它看起來像這樣:

SomeRoute = Em.Route.extend({ 
    setupController: function(controller, model) { 
     controller.set('content', model); 
    } 
}); 

並且你可以修改它,如果你想。

我不知道你的JSON格式是否正確,因爲你沒有在你的代碼添加。無論哪種方式,每一個JSON對象應具有id財產,你的模型應該id財產,除非您配置存儲/適配器有一個主鍵不同於id。在整個應用程序中,有時您會直接調用該id,但有時您必須使用命名約定(例如:「照片」路徑中的動態片段)。

對於這樣一個模型:

YIH.Photo = DS.Model.extend({ 
    url: DS.attr('string'), 
    caption: DS.attr('string') 
}); 

爲了增加賽事,你必須提供JSON是這樣的:

YIH.Photo.FIXTURES = [ 
    { id: 1, 
     url: 'http://ecx.images-amazon.com/images/I/516cyMC9O7L.jpg', 
     caption: 'Image 1' 
    }, 
    { id: 2, 
     url: 'http://ecx.images-amazon.com/images/I/51og8BkN8jL._SS250_.jpg', 
     caption: 'Image 2' 
    } 
]; 

你可能要檢查這個樣本小提琴:http://jsfiddle.net/schawaska/n3hY6/

相關問題