gpt4 book ai didi

javascript - 如何在 Ember.js 中动态加载 partials/views/templates

转载 作者:可可西里 更新时间:2023-11-01 02:54:07 26 4
gpt4 key购买 nike

所以我有以下设置。

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

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

到目前为止一切正常。

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

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

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

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

目前使用的代码如下:

idex.hbs 看起来像这样:

 <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

{{#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

<h1>Project: {{generatorFields.0.value}}</h1>

app.js

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"
}];

最佳答案

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

Ember.Handlebars.helper('dynPartial', function(name, options) {
return Ember.Handlebars.helpers.partial.apply(this, arguments);
});

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

{{#each item in controller}}
{{dynPartial item.templateName}}
{{/each}}

对于 templateNamegenerator-1 的生成器。这将使用部分 _generator-1 呈现。注意模板的id/data-template-name的名称必须以下划线开头。

关于javascript - 如何在 Ember.js 中动态加载 partials/views/templates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17659368/

26 4 0