Я новичок в области Ember.js.Ember.js Ajax звонок не работает должным образом
Я пытался сделать вызов ajax с помощью Framework и не получал значения, как ожидалось.
Ниже приведен код в страницы -
Ссылка на первый вызов Ajax, и она работает, как ожидалось.
{{#linkTo listemployee class="span3 btn btn-large btn-block"}}Employees{{/linkTo}}
данные вызовов для заполнения таблицы -
App.ListemployeeRoute = Ember.Route.extend({
setupController: function(controller) {
$.getJSON('data/Tutorials.json', function(data) {
controller.set('content',data);
});
}
});
и шаблон для данных -
<script type="text/x-handlebars" data-template-name="listemployee">
<h3 class="demo-panel-title">This is the list for Employee</h3>
<table border=2>
<tr><td><b>Name</b></td><td><b>Address</b> </td><td><b> Phone</b></td><td colspan=3>Action<td></tr>
{{#each item in content}}
<tr><td>{{item.name}}</td><td>{{item.address}} </td><td> {{item.phone}}</td><td> {{#linkTo viewemployee item.name}}View{{/linkTo}} </td><td>Edit</td><td>Delete</td></tr>
{{/each}}
</table>
</script>
выше работает, как ожидалось.
Но когда я нажал на
{{#linkTo viewemployee item.name}}View{{/linkTo}}
для вышеприведенного раздела -
кодМоего контроллера находится в App.js -
App.Router.map(function() {
this.route("listemployee", { path: "/employees" });
this.resource("viewemployee", {
path: "/employees/:name"
});
});
И мой ViewemployeeRoute
является
App.ViewemployeeRoute = Ember.Route.extend({
model: function(params) {
return {name: params.name};
},
setupController: function(controller, model) {
$.getJSON('data/Tutorials.json', function(data) {
data.forEach(function(item){
if(item.name === model.name)
{
var tabledata = '<table border = \"1\" ><tr><td>Name</td><td>'+item.name+'</td></tr><tr><td>Address</td><td>'+item.address+'</td></tr><tr><td>Phone</td><td>'+item.phone+'</td></tr></table>';
$('#employeetable').html(tabledata);
controller.set('content',item);
}
});
});
}
});
и мой шаблон код -
<script type="text/x-handlebars" data-template-name="viewemployee">
<h3 class="demo-panel-title">This is the View Employee template</h3>
<div id = "employeetable">
</div>
</script>
Проблема -
Данные для работника не приходит, когда я нажав на View
Ссылка на первый раз.
Но когда я обновляю страницу, данные поступают так, как ожидалось.
Я думаю, проблема в том, что когда я нажимаю на ссылку View
, ответ от ajax приходит позже после рендеринга страницы.
Итак, что мне делать в коде, чтобы у меня была информация о сотруднике по ссылке на ссылку View
?
Оцените любую помощь в этом отношении.
Спасибо.
Обновление 2 после попытки ответа. Но все тот же результат наступает.
Я изменил свое приложение.JS следующим образом -
App.ListemployeeRoute = Ember.Route.extend({
model: function() {
return App.Employee.findAll();
}
});
App.ViewemployeeRoute = Ember.Route.extend({
model: function(params) {
return App.Employee.find(params);
}
});
App.Employee.reopenClass({
findAll: function() {
var result = Ember.ArrayProxy.create({content: []});
var self = this;
$.ajax({
url: 'data/Tutorials.json',
type: 'GET',
success: function(data, textStatus, xhr) {
result.set('content', data);
},
error: function(xhr, textStatus, errorThrown) {
alert('error');
}
});
return result;
},
find: function(params) {
var result = Ember.Object.create({content: null});
var self = this;
$.ajax({
url: 'data/Tutorials.json',
type: 'GET',
success: function(data, textStatus, xhr) {
data.forEach(function(item){
if(item.name === params.name)
{
result.set('content', item);
}
});
},
error: function(xhr, textStatus, errorThrown) {
alert('not found');
}
});
return result;
}
});
И мой файл данных -
[
{
"name": "John",
"address": "John's Home",
"phone": "John's Phone"
},
{
"name": "Harry",
"address": "Harry's Home",
"phone": "Harry's Phone"
},
{
"name": "Tom",
"address": "Tom's Home",
"phone": "Tom's Phone"
}
]
мы можем найти работу здесь -
http://www.phloxblog.in/ember-crud-ajax/
Я отредактировал свой вопрос в соответствии с вашими обновлениями. Но проблема все же не решена. Можете ли вы проработать этот код и дать мне какое-то направление. –
Я должен добавить, что я не уверен, как это будет работать, когда вызовы ajax не будут завершены до оператора return. Возможно ли, возможно, придется подключиться к самому объекту модели, вместо того чтобы делать возврат? – agmcleod
@agmcleod Вам нужно будет использовать обещания, чтобы заставить его работать правильно. – Rudi