0

尽管我在学习 Ember 以及如何在我需要的上下文中使用它方面取得了一些成功,但我仍在努力寻找解决此要求的方法。

我正在使用 Ember 处理一组字段定义,以便我可以动态生成一种字段形式以呈现给用户。其中一些字段是根据集合中的其他字段计算的 - 因此在生成字段时,视图元素需要能够获取一个或多个其他字段的值。我尝试将计算控件放入字段对象中,也尝试使用属性(@each)放入数组控制器中,但没有任何效果。我已经尝试了太多不同的渗透来在这里展示我尝试的解决方案,所以我已经清理了代码并准备好添加所需的绑定功能。

我可能通过使用 FieldController 让自己变得更难了,但它在使用一个 view_field 模板生成 view_fields 表单时效果非常好。

<html>
<head>
    <title>Ember.js: Calculate properties using multiple object in an array controller</title>
    <link rel="stylesheet" href="css/normalize.css">    
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script src="js/libs/ember-0.9.5.min.js"></script>

    <script>

    //the application
    App = Ember.Application.create({

    });
    //the model

     App.Field = Ember.Object.extend({
        "name": null,
        "value": null, 
        "controlsource": null
    });
    //an array controller to interface between the data and the views
    App.FieldController = Ember.ArrayController.extend({
        content: [],

    }); 
    App.instanceFieldController=App.FieldController.create();

    //populate the controller with data
    App.instanceFieldController.pushObjects([   
        App.Field.create({name:"field1",value:"1",controlsource:""}),
        App.Field.create({name:"field2",value:"2",controlsource:""}),
        App.Field.create({name:"field3",value:null,controlsource:"field1"}),//this field's value should be calculated from field1
        App.Field.create({name:"field4",value:null,controlsource:"field2"})//this field's value should be calculated from field2
    ]);

    //A collection-view which has a collection of a view, each of which defines the presentation of a fields
    App.FieldCollectionView = Em.CollectionView.extend({            
        itemViewClass: Em.View.extend({
            templateName: "textFieldTemplate"       
        }),
        contentBinding: "App.instanceFieldController.content"
    });

</script>

<h1>Ember.js: Calculate properties using multiple object in an array controller</h1>

<!-- THE FORM TO BE POPULATED WITH THE FIELDS -->
<script type="text/x-handlebars">
    <form action="">
        {{view App.FieldCollectionView}}
        <input type="submit" value="Go">
    </form>
</script>
<!-- THE TEMPLATE FOR HOW TO DISPLAY EACH FIELD -->
<script type="text/x-handlebars" data-template-name="textFieldTemplate">
    <label {{bindAttr for="textField.elementId"}}>{{content.name}}</label>              
    {{view Em.TextField valueBinding="content.value"}}      
</script>

4

0 回答 0