Ember数据路由/映射到MySQL数据库

Ams*_*ner 1 mysql routing json ember.js ember-data

我一直在努力理解这个概念,而且我花了很多时间研究这个,但我已经无处可去了.

我在便宜的主机(one.com)上有一个MYSQL数据库.我在所说的数据库中创建了一个表,现在我希望我的Ember应用程序从中获取所有条目.

我该如何做到这一点?据我了解,ember-data尝试从特定项URL获取信息..但是如何使用相应的URL映射我的数据库条目?

我不能直接在服务器上安装任何软件,因为我没有它.但是支持PHP.使用PHP我可以轻松检索所有数据库条目并使用ember-data请求的正确格式将它们编码为JSON,但我不知道下一步该做什么.

www.myurl.com/blog/js/app.js

App = Ember.Application.create();

// data storage -----------------------------------------------------

App.Store = DS.Store.extend({
    revision: 12,
        adapter: DS.RESTAdapter.create({
            url: 'http://www.myurl.com/blog'
        })

});

// routers, routes --------------------------------------------------

App.Router.map(function() {
    this.resource('contact');
    this.resource('items', { path: "/items/" });
    this.resource('item', { path: "/items/:item_id"});
    this.resource('hearts');
    this.resource('tags');
});

App.IndexRoute = Ember.Route.extend({
    redirect: function() {
        this.transitionTo('items');
    }
});

App.ItemsRoute = Ember.Route.extend({
    model: function() {
        return App.Item.find();
    }
});

App.ItemRoute = Ember.Route.extend({
    model: function(params) {
        return App.Item.find(params.item_id);
    }
});

// controllers --------------------------------------------------------

App.ItemsController = Ember.ArrayController.extend({
    // ...
});

App.ItemController = Ember.ObjectController.extend({
    // ...
});

// model -----------------------------------------------------------

App.Item = DS.Model.extend({
    tag: DS.attr('string'),
    title: DS.attr('string'),
    posted: DS.attr('date'),
    updated: DS.attr('date'),
    intro: DS.attr('string'),
    full: DS.attr('string'),
    visible: DS.attr('number')
});
Run Code Online (Sandbox Code Playgroud)

www.myurl.com/blog/items/index.php

$host = "myhost";
$usr = "myuser";
$pwd = "mypwd";
$db= "mydb";

$connect = mysql_connect("$host", "$usr", "$pwd", "$db") or die("errormsg");

mysql_select_db("$db", $connect) or die("errormsg");

$sql = "SELECT * FROM mytable";

$result = mysql_query($sql);

$rows = array();

if(mysql_num_rows($result)){
    while($row=mysql_fetch_assoc($result)) {
        $rows['post'][]=$row;
    }
}

print(json_encode($rows));

mysql_close($db);
Run Code Online (Sandbox Code Playgroud)

Mik*_*tti 5

好像你大部分都在那里,下一步就是尝试一下并做一些调试.

第一步:确保您的API按照ember期望的方式返回JSON.从javascript控制台尝试这样的东西:

$.getJSON("/items").then( function(response) {
  console.log("response: ", response);
});
Run Code Online (Sandbox Code Playgroud)

响应应该是项目列表.是吗?

第二步:查看ember-data是否能够使用api获取项目.所以从控制台,尝试:

App.Item.find({}).then( function(items) {
  console.log("item count: ", items.get('length'));
  console.log("items: ", items.getEach('id'));
});
Run Code Online (Sandbox Code Playgroud)

  • Ember不使用App.Router中的路径来确定您的API的URL.它希望API遵循这里所解释的宁静约定:http://emberjs.com/guides/models/the-rest-adapter/#toc_url-conventions - 你可以通过打开chrome浏览器工具来查看url ember试图使用的内容当您调用App.Item.find({})时查找外部请求,然后确保您的api已设置为响应正确的URL. (2认同)