データベースに挿入するEmber Dataを含むフォームを介してオブジェクトの作成を処理する例を構築しようとしています。
これまでのところ、私のストアはクライアント側で結果を表示していますが、データをサーバーに処理する限り、私のデータは常に定義されておらず、空白のレコードが作成されているようです。
今のところ、私の php API は洗練されていません (それが空白の挿入を許可する理由です) が、テストを実行しているので、データベースにデータを作成することに関心があります。
Ember Data でフォームを処理するにはどうすればよいですか? (そして、なぜ「createRecord」ではなく「createRecords」メソッドを使用しているのですか?)
すべてのヘルプは非常に高く評価されます。私は本当に Ember で物事を引き出そうとしており、ドロップして別のフレームワークに切り替える必要がないことを望んでいます。
これは、フォームを介してコードを介して直接 Person を作成しようとしている私のコードです。
エンバー/JS:
App = Em.Application.create();
App.Person = DS.Model.extend({
id: DS.attr('string'),
name: DS.attr('string'),
lastname: DS.attr('string'),
didLoad: function() {
console.log(this.get('lastname') + " finished loading.");
}
}).reopenClass({
url: '../api/index.php?model=entity',
});
App.adapter = DS.Adapter.create({
findAll: function (store, type) {
var url = type.url+'&method=read';
$.getJSON(url, function(data) {
store.loadMany(type, data);
});
},
createRecord: function (store, type, model) {
console.log(id);
var url = type.url+'&method=create'
$.ajax({
url: url,
data: model.get('data'),
//data: id,
dataType: 'json',
type: 'POST',
success: function(data) {
console.log('didCreate');
}
})
},
createRecords: function (store, type, array) {
$.ajax({
url: type.url+'&method=create',
data: array.mapProperty('data'),
dataType: 'json',
success: function(data) {
store.didCreateRecords(type, array, data);
}
})
},
find: function(store, type, id) {
console.log('find one');
var url = type.url;
url = url.fmt(id);
$.getJSON(url, function(data) {
store.load(type, id, data);
});
}
});
App.store = DS.Store.create({
revision: 4,
adapter: App.adapter
});
App.personController = Ember.ArrayController.create({
content: [],
init: function(){
this._super();
this.set('content', App.store.findAll(App.Person));
},
loadCode: function() {
content: [];
var self = this;
var wycats = App.store.createRecord(App.Person, {"id":"", "name":"12", "lastname":"Steve"});
App.store.commit();
console.log('from file');
},
submitForm: function(event) {
console.log('Called Sumbit');
App.store.createRecord(App.Person, this.get("content"));
App.store.commit();
}
});
App.personView = Ember.View.extend({
templateName: 'text'
});
HTML:
<script type="text/x-handlebars">
<b>{{App.title}}</b><br>
{{view App.personView}}
Count: ({{App.personController.length }})
{{#each App.personController}}
<p>{{lastname}} {{name}}</p>
{{/each}}
</script>
<script type="text/x-handlebars" data-template-name="text">
<h2>Create from Code</h2>
<div class="send_form">
<button {{action "loadCode" target="App.personController"}}>Create</button>
<hr>
<h2>Create from Form</h2>
First name: {{view Ember.TextField valueBinding="lastname"}} <br/>
Last name: {{view Ember.TextField valueBinding="name"}} <br/>
<button {{action "submitForm" target="App.personController"}}>Create</button>
<h3>Current values: {{name}} {{lastname}}</h3>
</div>
</script>
バックエンド API (PHP):
<?php
require_once 'config.php';
if (!$errors) {
$method = mysql_real_escape_string($_GET['method']);
$model = mysql_real_escape_string($_GET['model']);
$format = mysql_real_escape_string($_GET['format']);
if($method === ''){
$method = mysql_real_escape_string($_POST['method']);
}
switch ($method) {
case 'create' :
$fieldlist=$vallist='';
foreach ($_POST as $key => $value) {
$fieldlist.=$key.',';
$vallist.='\''.urlencode($value).'\',';
}
$fieldlist=substr($fieldlist, 0, -1);
$vallist=substr($vallist, 0, -1);
$return.= $vallist.' (val)
';
$return.= $fieldlist .' (field)
';
$query='INSERT INTO `test_'.$model.'` ('.$fieldlist.') VALUES ('.$vallist.')';
$sql = mysql_query($query) or
die ('Error while getting data'.mysql_error());
$return= $sql;
break;
case 'read' :
$query = "SELECT * FROM `test_{$model}`";
$result = mysql_query($query);
$return = array();
while($row = mysql_fetch_assoc($result)) {
$return[] = $row;
}
$return= json_encode($return);
break;
case 'reads' :
$query = "SELECT * FROM `test_{$model}`";
$result = mysql_query($query);
$return='{ "'.$model.'" : ';
$resultados = array();
while($row = mysql_fetch_assoc($result)) {
$resultados[] = $row;
}
$return.= json_encode($resultados);
$return.=' }';
break;
}
mysql_close();
switch ($format) {
default :
echo $return;
break;
}
}
?>