0

I am trying to use Emberjs with PHP as backend.

Here's my 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;

and my PHP code,

<?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);

?>

But I am getting this on console,

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

I can see it is adding .json to php file but why? Moreover, how do I get around with it or how do I implement my own Ajax calls in Ember? Moreover, I am using Ember Model in the code.

John Altar
  • 141
  • 2
  • 13

1 Answers1

1

ember-model does not provide out pf the box any configuration option to change this behaviour, e.g. adding the .json at the end of the URL.

So a possible solution could be to reopen the RESTAdapter and override the buildURL function to not include the .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;
    }
  }
});

But this is not that future proof if the original code changes and you want to update the lib you had to change also your override.

Hope it helps.

intuitivepixel
  • 23,302
  • 3
  • 57
  • 51
  • What if I don't want to use the REST adapter and use my own ajax calls? – John Altar Aug 27 '13 at 20:38
  • @JohnAltar, then it will be a lot easier because writing your own ajax calls you will have total control – intuitivepixel Aug 27 '13 at 20:40
  • Where exactly do I have to make my Ajax calls? Model or Controller? An example would be great. – John Altar Aug 27 '13 at 20:45
  • 1
    @JohnAltar, you need to write your own Adapter, see this blog post: http://blog.sensible.io/2013/06/26/ember-model-introduction.html for a good starting point, but be aware that you will need to get your hands dirty, because you will need to deal with all the features like promises, building url's depending on model type, sideloading etc. etc. hope it helps – intuitivepixel Aug 27 '13 at 21:09