首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Ember.js中动态加载部分/视图/模板

如何在Ember.js中动态加载部分/视图/模板
EN

Stack Overflow用户
提问于 2013-07-15 16:42:51
回答 4查看 8.3K关注 0票数 9

所以我有下面的设置。

在主页上,基于来自使用夹具数据的模型的列表,显示了一个生成器列表。

现在,当单击其中一个生成器链接时,将显示一个新页面,其中包含一些输入字段,这些字段是根据这些夹具数据动态生成的。

在此之前,一切都是完美的。

现在,当我更改生成器页面中的输入字段的值(在选择其中一个生成器之后)以查看在我的输入字段下面的某种预览div中正在更新的更改时,这很容易。我可以使用{{generatorFields.0.value}}绑定第一个输入字段,.1.,等等,直到绑定所有输入字段为止。

但是可以想象,每个生成器都有自己的格式和输入字段,我希望为每个生成器创建一个新的.hbs文件,然后将该文件传递到生成器页面以显示预览。

我部分地解决了0.1%的问题。在generator.hbs文件中,我输入了{{partial "generator-1"}},这加载了包含{{generatorFields.0.value}}绑定的_generator-3.hbs文件,它可以工作。但是这个部分不是动态的;每次使用不同的生成器时,我都需要加载不同的部分。我怎样才能做到这一点?

如何动态传递部分名称或基于我拥有的模型数据加载模板?

到目前为止使用的代码如下:

idex.hbs看起来如下:

代码语言:javascript
复制
 <table class="table table-hover">
            <thead>
                <tr>
                    <th>#</th>
                    <th>Generator name</th>
                    <th>Action</th>
                </tr>
            </thead>
            <tbody>
                {{#each model}}
                <tr>
                    <td>{{id}}</td>
                    <td>{{title}}</td>
                    <td>{{#linkTo 'generator' this classNames="btn btn-mini pull-right"}}Create file{{/linkTo}}</td>
                </tr>
                {{/each}}
                </tbody>
        </table>

generator.hbs

代码语言:javascript
复制
{{#each generatorFields}}
<div class="row-fluid">
    <div class="span4">{{name}}</div>
    <div class="span8">{{view Ember.TextField valueBinding='value' class='span12' placeholder='Type value here…'}}</div>
</div>
{{/each}}

{{partial "generator-1"}}

_generator-1.hbs

代码语言:javascript
复制
<h1>Project: {{generatorFields.0.value}}</h1>

app.js

代码语言:javascript
复制
App.Store = DS.Store.extend({
    revision: 13,
    adapter: 'DS.FixtureAdapter'
});

App.Router.map(function () {
    this.resource('index', { path: '/' });
    this.resource('generator', {path: '/generator/:generator_id'});
});

App.IndexRoute = Ember.Route.extend({
    model: function () {
        return App.Generator.find();
    }
});

App.Generator = DS.Model.extend({
    title: DS.attr('string'),
    templateName:  DS.attr('string'),
    generatorFields: DS.attr('generatorFields')
});


// Fixture data

DS.RESTAdapter.registerTransform('generatorFields', {
    serialize: function(serialized) {
        return Em.none(serialized) ? {} : serialized;
    },
    deserialize: function(deserialized) {
        return Em.none(deserialized) ? {} : deserialized;
    }
});

App.Generator.FIXTURES = [{
    id: 1,
    title: "test 1",
    generatorFields: [
        {id: 1, name: "name 1", value: ""}
    ],
    templateName: "generator-1"
}, {
    id: 2,
    title: "test 2",
    generatorFields: [
        {id: 1, name: "name 1", value: ""},
        {id: 2, name: "name 2", value: ""},
    ],
    templateName: "generator-2"
}];
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-16 14:31:16

您可以创建一个动态的部分帮助程序,它使用传递的名称与{{partial}}助手一起呈现。

代码语言:javascript
复制
Ember.Handlebars.helper('dynPartial', function(name, options) {
  return Ember.Handlebars.helpers.partial.apply(this, arguments);
});

然后使用这个动态的部分,{{dynPartial}}代替。

代码语言:javascript
复制
{{#each item in controller}}
  {{dynPartial item.templateName}}
{{/each}}

用于具有templateName of generator-1的生成器。这将使用部分_generator-1呈现。注意,模板的id/data-模板名的名称必须以下划线开头。

票数 15
EN

Stack Overflow用户

发布于 2014-02-05 16:36:19

您应该能够简单地将动态部分变量放置在部分助手中。

代码语言:javascript
复制
{{#each item in controller}}
    {{partial item.templateName}}
{{/each}}

正如@darshan所指出的,如果您有一个带有templateName of generator-1的生成器,它将呈现部分_generator-1

票数 5
EN

Stack Overflow用户

发布于 2014-02-25 00:25:20

虽然@Darshan的答案比下面的更简单,而且在很多情况下都会起作用,但我遇到了一个问题:如果第二个模型的部分名称与第一个模型相同(错误在成员中?),使用不同的模型过渡到相同的路径会导致部分重呈现。设置一个查看模型的视图可以修复这个问题。

代码语言:javascript
复制
App.FooDynamicLayout = Ember.View.extend
  rerenderOnModelChange: (->
    @rerender()
  ).observes('model')

用以下方式称呼它:

代码语言:javascript
复制
view App.FooDynamicLayout templateName=dynamicTemplateName model=model
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17659368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档