私は backbone.js + スリム php + jquery モバイル アプリを持っています。
大学のモジュールを検索して 1 つ選び、リンクをタップしてそのモジュールに関連する講師のリストを作成します。これはうまくいきます!
講師のリスト項目をタップして講師の詳細ページを作成できるようにしたいのですが、理解できない 404 が表示されます。
講師の詳細へのルーティング方法に問題があると思います
私のAPIメソッドは次のとおりです。
$app->get('/modules', 'getModules');
$app->get('/modules/:id', 'getModule');
$app->get('/modules/search/:query', 'getModulesByName');
$app->get('/modules/:id/lecturers', 'getLecturers');
$app->get('/modules/:id/lecturers/:staffNumber', 'getLecturer');
ここでは getLecturers を定義しています - モジュールに関連付けられた講師のリストを取得します:
function getLecturers($id) {
$sql = "select l.staffNumber, l.firstName, l.lastName, l.moduleNo1, l.moduleNo2, l.email, m.moduleNo
from lecturertable l, moduletable m
where m.moduleNo=:id AND (l.moduleNo1=:id OR l.moduleNo2=:id)";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->bindParam("id", $id);
$stmt->execute();
$lecturer = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
if (!isset($_GET['callback'])) {
echo json_encode($lecturer);
} else {
echo $_GET['callback'] . '(' . json_encode($lecturer) . ');';
}
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
ここでは、「staffNumber」を渡して個々の講師を取得しようとしています:
function getLecturer($staffNumber) {
$sql = "select l.staffNumber, l.firstName, l.lastName, l.moduleNo1, l.moduleNo2, l.email
from lecturertable l
where l.staffNumber=:staffNumber";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->bindParam("staffNumber", $staffNumber);
$stmt->execute();
$lecturer = $stmt->fetchObject();
$db = null;
if (!isset($_GET['callback'])) {
echo json_encode($lecturer);
} else {
echo $_GET['callback'] . '(' . json_encode($lecturer) . ');';
}
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
これまでのところ、とても良いと思います!
次に、main.js でルートを設定してみます。
"":"list",
"list":"list",
"modules/:id":"moduleDetails",
"modules/:id/lecturers":"moduleLecturers",
"modules/:id/lecturers/:staffNumber":"lecturerDetails"
最後の 2 つのルートに一致する関数がいくつかあります。
moduleLecturers:function (id) {
var module = new Module({id:id});
module.lecturers.fetch();
this.changePage(new ModuleLecturersPage({model:module.lecturers}));
},
lecturerDetails:function (staffNumber) {
var lecturer = new Lecturer({staffNumber:staffNumber});
var self = this;
lecturer.fetch({
success:function (data) {
self.changePage(new LecturerView({model:data}));
}
});
},
ただし、lecturerDetails に問題があるようです。コンソールは、lecturer.fetch コードでエラーを示しています: GET localhost/api/lecturers/lecturer 404 (Not Found)。誰かが私を正しい方向に向けることができますか?
私の講師モデルは次のとおりです。
window.Lecturer = Backbone.Model.extend({
urlRoot:"../api/lecturers/lecturer",
initialize:function () {
this.lecturer = new lecturerCollection();
this.lecturer.url = '../api/modules/lecturers/' + this.staffNumber + '/lecturer';
}
});
window.lecturerCollection = Backbone.Collection.extend({
model:Lecturer,
url:"../api/lecturers/lecturer",
});
そして、ビューは次のとおりです。
window.LecturerView = Backbone.View.extend({
initialize:function () {
this.template = _.template(tpl.get('lecturer-details'));
},
render:function (eventName) {
$(this.el).html(this.template(this.model.toJSON()));
return this;
}
});
リンクを使用して講師リスト アイテムから講師詳細テンプレートにリンクします: href='#modules/<%= moduleNo %>/lecturers/<%= staffNumber %>'
私が行方不明であることが明らかな何かがあるかどうか、誰かアドバイスしてもらえますか - 私はこれを回避する方法をたくさん試していますが、あまり成功していません!
ありがとう!