1

ハードコーディングする代わりに、Ember.Select 値を使用して JSON をフィルター処理したいと考えています。これが私のApp.jsです

App = Ember.Application.create({});

App.IndexRoute = Ember.Route.extend({
    renderTemplate : function(controller) {
        this.render('MyApp', {
            controller : controller
        });
    },
    model : function() {
        return App.MyTemplateModel.find();
    }
});

App.IndexController = Ember.ArrayController.extend({

    filteredContent : Ember.computed.oneWay("content"),
    last : function() {
        var filtered = this.get('content').filterProperty('last_name', "Solow");
        this.set("filteredContent", filtered);

    }
});

App.MyTemplateModel = Ember.Model.extend({
    id : Ember.attr(),
    last_name : Ember.attr(),
    first_name : Ember.attr(),
    suffix : Ember.attr(),
    expiration : Ember.attr()
});

App.controller = Ember.Object.create({
    selectedProgrammer : null,
    content : [Ember.Object.create({
        last_name : "Solow",
        id : 1
    }), Ember.Object.create({
        last_name : "Tom",
        id : 2
    })]
});

App.MyTemplateModel.url = "http://ankur1.local/index.php/api/example/users/";
App.MyTemplateModel.adapter = Ember.RESTAdapter.create();
var existing = App.MyTemplateModel.find();
App.MyTemplateModel.camelizeKeys = true;

行では、

 var filtered = this.get('content').filterProperty('last_name', "Solow");

「Solow」をハーコーディングしていますが、Ember.Select 値を使用したいです。

これをやってみたのですが、

 var selectedProgrammer = App.controller.get("selectedProgrammer");
 var filtered = this.get('content').filterProperty('lastName', App.controller.get('selectedProgrammer'));
 this.set("filteredContent", filtered);

しかし、それは何もしません & さらに、これが私が HTML で行っていることです。

<script type="text/x-handlebars" data-template-name="MyApp">
{{#each item in filteredContent }}
            <tr><td>
            {{id}} <p> {{item.first_name}} {{item.expiration}}</p>
            </td></tr>
            {{/each}}

            <button {{action last}}>filter</button>

            {{view Ember.Select
            contentBinding="App.controller.content"
            optionValuePath="content.id"
            optionLabelPath="content.last_name"
            selectionBinding="App.controller.selectedProgrammer"}}
</script>

さらに、ここに JSON のサンプルがあります。http://pastebin.com/7dyNQi4K

どこが間違っているか、またはどのような変更を加える必要があるか?

4

1 に答える 1

3

あなたEmber.SelectはにバインドされてApp.controller.selectedProgrammerいます。選択が変更されると、オブジェクトを受け取ります。したがって、コントローラーでは、last_nameを使用してそのオブジェクトからプロパティにアクセスしますApp.controller.get('selectedProgrammer.last_name')

App.IndexController = Ember.ArrayController.extend({
    filteredContent : Ember.computed.oneWay("content"),
    last : function() {
        var lastName = App.controller.get('selectedProgrammer.last_name');
        var filtered = this.get('content').filterProperty('last_name', lastName);
        this.set("filteredContent", filtered);
    }
});
于 2013-08-07T23:14:45.927 に答える