使用PHP作为Ember.js的后端


Using PHP as a Backend with Ember.js

我正在尝试将Emberjs与PHP一起用作后端。

这是我的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 lastName = App.controller.get('selectedProgrammer.last_name');
        var filtered = this.get('content').filterProperty('last_name', lastName);
        this.set("filteredContent", filtered);
    },
    refresh : function() {
        var refresh = this.get('content');
        this.set("filteredContent", refresh);
    }
});
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 : "Arbogast",
        id : 2
    }), Ember.Object.create({
        last_name : "Dorfman",
        id : 3
    }), Ember.Object.create({
        last_name : "Eliason",
        id : 4
    })]
});
App.MyTemplateModel.url = "user.php";
App.MyTemplateModel.adapter = Ember.RESTAdapter.create({
  ajaxSettings: function(url, get) {
    return {
      url: url,
      type: get
    };
  }
});
var existing = App.MyTemplateModel.find();
App.MyTemplateModel.camelizeKeys = true;

和我的PHP代码

<?php
$con = mysql_connect("localhost","root","school");
if (!$con)
{
  die('Could not connect: ' . mysql_error());
}
mysql_select_db("codeigniter", $con);
$id = $_GET['id'];
$query = "SELECT * FROM `user`";
$comments = mysql_query($query);
while($row = mysql_fetch_array($comments, MYSQL_ASSOC))
{
   $name = $row['first_name'];
   echo json_encode($name);
}
mysql_close($con);
?>

但我在控制台上得到了这个,

GET http://ember.local/user.php.json 404 (Not Found) 

我可以看到它正在将.json添加到php文件中,但为什么呢?此外,我该如何处理它,或者如何在Ember中实现我自己的Ajax调用?此外,我在代码中使用Ember模型。

ember模型没有提供任何开箱即用的配置选项来改变这种行为,例如在URL末尾添加.json

因此,一个可能的解决方案是重新打开RESTAdapter并覆盖buildURL函数以不包括.json

Ember.RESTAdapter.reopen({
  buildURL: function(klass, id) {
    var urlRoot = Ember.get(klass, 'url');
    if (!urlRoot) { throw new Error('Ember.RESTAdapter requires a `url` property to be specified'); }
    if (!Ember.isEmpty(id)) {
      return urlRoot + "/" + id;
    } else {
      return urlRoot;
    }
  }
});

但是,如果原始代码发生了更改,并且您想要更新您必须更改的库以及您的覆盖,那么这并不是未来的证明。

希望能有所帮助。