レンダリングにかなり複雑なビューがありますが、これには再帰があります(通常のフォルダ/ファイルネストリスト)。異種のオブジェクト(フォルダやファイル)が含まれているため、Handlebarsテンプレートを作成するのがさらに難しくなります。EmberJSビュー内にプログラムでリンクを作成する
私が見つけた唯一の解決策は、ビューを作成し、レンダリングバッファを手動で満たすことです。私は以下のソリューションに付属している:
今App.LibraryContentList = Ember.View.extend({
tagName: 'ol',
classNames: ['project-list', 'dd-list'],
nameChanged: function() {
this.rerender();
}.observes('[email protected]'),
render: function(buffer) {
// We only start with depth of zero
var content = this.get('content').filterProperty('depth', 0);
content.forEach(function(item) {
this.renderItem(buffer, item);
}, this);
},
renderItem: function(buffer, item) {
switch (item.constructor.toString()) {
case 'App.Folder':
this.renderFolder(buffer, item);
break;
case 'App.File':
this.renderFile(buffer, item);
break;
}
},
renderFolder: function(buffer, folder) {
buffer.push('<li class="folder dd-item">');
buffer.push('<span class="dd-handle">' + folder.get('name') + '</span>');
// Merge sub folders and files, and sort them by sort order
var content = this.mergeAndSort();
if (content.get('length') > 0) {
buffer.push('<ol>');
content.forEach(function(item) {
this.renderItem(buffer, item);
}, this);
buffer.push('</ol>');
}
buffer.push('</li>');
},
renderFile: function(buffer, album) {
buffer.push('<li class="album dd-item">');
buffer.push('<span class="dd-handle">' + file.get('name') + '</span>');
buffer.push('</li>');
}
});
、私が希望する各フォルダ及び各ファイルはクリック可能になるようにリンクを追加し、別のルートにリダイレクトすることができることです。しかし、私はリンクにアクセスすることができないので、私はそれをやろうとしています。ヘルパー?私はLinkViewビューで試してみましたが、成功しませんでした。各アイテムに手動でハンドラーを登録する必要がありますか?
代わりにCollectionViewを使用してコンテンツを分割し、コンテンツを深さで分割してテンプレートを使用してレンダリングすることも考えましたが、もっと複雑に思えます。
どのような考えですか?
私がテストしていないだけという考え、どのようにこの 'Ember.Handlebars.compile(「 {{{リンク物語}}}」)' – Hawili
のようなものを追加することについては、私はこのことについて考えたが、私は唯一の午前(私はテンプレートをコンパイルしています)、Handlebarsランタイムを使用しているため、Handlebars全体に依存性を導入することは避けてください。 –