我已将完整的源代码放在https://github.com/ericgorr/myproject.git和 cascading_datasource 应用程序中。
我有一个带有以下代码的 item_model.js:
CascadingDatasource.Item = SC.Record.extend(
{
name: SC.Record.attr(String),
ph: SC.Record.attr(String)
});
CascadingDatasource.Item.itemQuery = SC.Query.remote( CascadingDatasource.Item, { targetDataSource: 'itemDataSource' });
我的 data_source.js 是:
sc_require('data_sources/itemDataSource');
CascadingDatasource.dataSource = SC.CascadeDataSource.create(
{
dataSources: ['itemDataSource'],
itemDataSource: CascadingDatasource.itemDataSource,
});
我的 itemController.js 是:
CascadingDatasource.itemController = SC.ObjectController.create({
});
我的 itemDataSource.js 是:
sc_require( 'models/item_model' );
CascadingDatasource.itemDataSource = SC.DataSource.create(
{
fetch: function( store, query )
{
var handled = false,
itemRecord;
if ( query.recordType === CascadingDatasource.Item && query.targetDataSource === 'itemDataSource')
{
CascadingDatasource.store.loadRecord( CascadingDatasource.Item, {
name: 'the name',
ph: 'the phone number'
});
var theRecords = CascadingDatasource.store.recordsFor( CascadingDatasource.Item );
// Indicate that we took this request.
handled = true;
}
return handled;
}
});
正是在这里,我错过了一个关键部分。我希望这个数据源只包含一个对象,但我不知道如何返回它的内容
我的 ready_state.js 是:
CascadingDatasource.ReadyState = SC.State.extend({
enterState: function()
{
CascadingDatasource.itemController.set( 'content', CascadingDatasource.store.find( CascadingDatasource.Item.itemQuery ) );
CascadingDatasource.getPath('mainPage.mainPane').append();
},
exitState: function()
{
CascadingDatasource.getPath('mainPage.mainPane').remove();
}
});
我有一个 SC.LabelView 具有以下内容:
valueBinding: SC.Binding.oneWay( 'CascadingDatasource.itemController.name' )
同样,问题似乎在于:
CascadingDatasource.store.find( CascadingDatasource.Item.itemQuery )
没有返回任何内容,我不知道为什么。
如果一切正常,主页上的 SC.LabelView 应该绑定到 CascadingDatasource.itemController 中保存的结果的“名称”和“ph”属性。但是,目前,主页是空白的。
我目前在 Chrome 控制台中没有看到任何错误。