0

私は 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 %>'

私が行方不明であることが明らかな何かがあるかどうか、誰かアドバイスしてもらえますか - 私はこれを回避する方法をたくさん試していますが、あまり成功していません!

ありがとう!

4

0 に答える 0