Sproutcore nested array one to many binding -
i have 3 tiers of objects, each 1 many. i'd like, when different notebook selected, page , column view elements cascading updates.
notebook > pages > columns
with notebookscontroller , notebookcontroller can bind
app.notebook = sc.record.extend({ name: sc.record.attr(string), pages: sc.record.tomany('app.page', {ismaster: yes, inverse: 'notebook'}) }); app.page = sc.record.extend({ pagenumber: sc.record.attr(number), notebook: sc.record.toone('app.notebook', {ismaster: no, inverse: 'pages'}), columns: sc.record.tomany('app.column', {ismaster: yes, inverse: 'page'}) }); app.column = sc.record.extend({ columnnumber: sc.record.attr(number), page: sc.record.toone('app.page', {ismaster: no, inverse: 'columns'}) });
following this, can't seem content binding pagescontroller work. want contents of pagescontroller, pagecontroller, columnscontroller, , columncontroller cascaded down when user clicks different notebook, views presented automatically flick across correct content.
arraycontroller notebookscontroller // contents filled fixture objectcontroller notebookcontroller // bound notebookscontroller selection arraycontroller pagescontroller // contentbinding: 'notebookcontroller.pages' not work! objectcontroller pagecontroller // bound pagescontroller selection // , down column
assuming have single notebook, try
app.notebookcontroller = sc.objectcontroller.create({ // call app.notebookcontroller.set('content', anotebook) // set content on controller }); app.pagecontroller = sc.arraycontroller.create({ // notebookcontroller proxy content, dont need // 'content' in binding contentbinding: 'app.notebookcontroller.pages' // bind list view app.pagescontroller.arrangedobjects. if in code // arranged objects reference array controller itself, has array methods // on }); app.pageselectioncontroller = sc.objectcontroller.create({ // need add // // selectionbinding: 'app.pageselectioncontroller.content // // collection view select page // can in places see when things change. controller proxy // selected page. selectiondidchange: function(){ console.log('page selection changed [%@]'.fmt(this.get('content'); }.observes('content') }); app.columnscontroller = sc.arraycontroller.create({ contentbinding: 'app.pageselectioncontroller.columns' // again, want show columns, bind // app.columnscontroller.arrangedobjects });
Comments
Post a Comment