Ajax使用Ember Js获取不返回值的方法

时间:2014-12-11 12:02:29

标签: javascript jquery ajax ember.js handlebars.js

我试图用ember js显示下拉。使用Ajax GET 方法。但它无法返回任何值。

我的要求仅限于Ajax

这是我的代码:

App.IndexController = Ember.ArrayController.extend({
  model1: function () {
    var Category1 ;
    $.ajax({
      url: 'http://localhost:63951/Home/GetAllCountry',
      type: 'GET',
      datatype: 'application/json',
      async: false,
      success: function (data) {
        alert(data);
        Category1 = data;
      }
    });
    return Category1;
  }.property(),

});

注意 在我的控制器警报内显示正常。

警告Json

[{“CountryID”:1,“CountryName”:“United States”}]

在我的html页面中无法获得该值。

js code here

 <script type="text/x-handlebars">
        <h2>Welcome to Ember.js</h2>
        {{outlet}}
    </script>
    <script type="text/x-handlebars" id="index">

        <div>

            {{view  "select"  id="AddProfile_SelectCountry"  content=model1  prompt="Select Country"  optionValuePath="content.CountryName" optionLabelPath="content.CountryName" valueBinding=default }}

            </div>


    </script>

    <script src="js/libs/jquery-1.10.2.js"></script>
    <script src="js/libs/handlebars-v1.3.0.js"></script>
    <script src="js/libs/ember-1.8.1.js"></script>
    <script src="js/appnew.js"></script>
    <!-- to activate the test runner, add the "?test" query string parameter -->

2 个答案:

答案 0 :(得分:1)

执行Category1 = data;时,您将变量标签Category1设置为数据值。您要做的是更改该标签引用的对象。

最好是使Category1成为Ember对象,并按数据设置其属性。像这样:

        model1: function () {
        var Category1 = Ember.Object.create();
        $.ajax({
                    url: 'http://localhost:63951/Home/GetAllCountry',
                    type: 'GET',            
                    datatype: 'application/json',
                    async: false,
                    success: function (data) {
alert(data)
                        Category1.setProperties(data); 
                   }
        });       
        return Category1;
            }.property(),

如果您的数据以数组形式出现,但您只想要第一个元素(如上所示),那么您应该Category1.setProperties(data[0]);

答案 1 :(得分:0)

你可以尝试:

$.ajax({
    url: 'http://localhost:63951/Home/GetAllCountry',
    type: 'GET',            
    datatype: 'application/json',
    async: false,
    success: function (data) {
        App.IndexController = Ember.ArrayController.extend({
            model1: data
        })
    }
});

那:

{{ view Ember.Select
    id="AddProfile_SelectCountry"
    contentBinding="App.IndexController"
    prompt="Select Country"
    optionValuePath="model1.CountryName"
    optionLabelPath="model1.CountryName"
    valueBinding=default
}}

修改

这个肯定会起作用,但并不是真正有效:

$.ajax({
    url: 'http://localhost:63951/Home/GetAllCountry',
    type: 'GET',            
    datatype: 'application/json',
    async: false,
    success: function (data1) {
        $.ajax({
            url: 'http://localhost:63951/Home/GetAllCities',
            type: 'GET',            
            datatype: 'application/json',
            async: false,
            success: function (data2) {
                App.IndexController = Ember.ArrayController.extend({
                    model1: data1
                    model2: data2
                })
            }
        })
    }
});

也许你可以尝试类似的东西:

App.IndexController = Ember.ArrayController.create({});

$.ajax({
    url: 'http://localhost:63951/Home/GetAllCountry',
    type: 'GET',            
    datatype: 'application/json',
    async: false,
    success: function (data) {
        App.IndexController.extend({
            model1: data
        })
    }
});

$.ajax({
    url: 'http://localhost:63951/Home/GetAllCities',
    type: 'GET',            
    datatype: 'application/json',
    async: false,
    success: function (data) {
        App.IndexController.extend({
            model2: data
        })
    }
});

但我不是Ember的专家抱歉。