Backbone.js 主干路由404错误
我有一个backbone.js+slim php+jquery移动应用程序 我搜索大学模块,选择一个,然后点击一个链接,生成与该模块相关的讲师列表。这管用 现在我想能够点击讲师列表项来生成讲师详细信息页面,我得到了一个404,我就是搞不清楚 我想我在向讲师介绍细节的方式上有问题 我的API方法是:Backbone.js 主干路由404错误,backbone.js,routing,http-status-code-404,slim,Backbone.js,Routing,Http Status Code 404,Slim,我有一个backbone.js+slim php+jquery移动应用程序 我搜索大学模块,选择一个,然后点击一个链接,生成与该模块相关的讲师列表。这管用 现在我想能够点击讲师列表项来生成讲师详细信息页面,我得到了一个404,我就是搞不清楚 我想我在向讲师介绍细节的方式上有问题 我的API方法是: $app->get('/modules', 'getModules'); $app->get('/modules/:id', 'getModule'); $app->get('/
$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');
在这里,我定义了讲师-提取与模块关联的讲师列表:
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() .'}}';
}
}
在这里,我试图通过传递一个“员工编号”来获得一个单独的讲师:
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"
并为最后两条路线提供两个匹配功能:
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}));
}
});
},
不过,讲师详细信息似乎有问题-控制台指示讲师出现错误。获取代码:GET localhost/api/讲师/讲师404(未找到)。谁能给我指出正确的方向吗
我的讲师模式是:
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='#模块//讲师/'
有谁能告诉我,我是否有什么明显的遗漏——我正在尝试很多方法来解决这个问题,但没有取得多大的成功
谢谢 通过调用
讲师.fetch
我认为您获取的模型的url与RESTful API不匹配。也许你应该调用讲师.讲师.fetch
来取回集合?你是否检查了请求是否已发送到你想要的url?让我们检查一下问题是在服务器端还是客户端,您是否应该在讲师详细信息回调中接收两个参数,如id
和staffnumber
?@Ingro-我试过了,我认为这里有问题,但不是讲师.讲师.fetch或讲师.讲师.fetch工作。你认为我遗漏了对模块的引用吗?这可能与Cyclone所说的有关?@Pablo-我通过Fiddler Web调试器检查,请求符合404。