Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 如何从URL获取ID_Backbone.js_Marionette - Fatal编程技术网

Backbone.js 如何从URL获取ID

Backbone.js 如何从URL获取ID,backbone.js,marionette,Backbone.js,Marionette,我正在开发一个主干木偶网络应用程序。 我使用此应用程序我得到的路线如下所示: projects/:id/tasks 如何获取该路由的ID(URL) 如果我使用这个,我会得到整个URL: Backbone.history.fragment 更新 这就是我为项目定义路线的方式 @Projectapp.module "ProjectsApp", (ProjectsApp, App, Backbone, Marionette, $, _) -> class ProjectsApp.R

我正在开发一个主干木偶网络应用程序。 我使用此应用程序我得到的路线如下所示:

projects/:id/tasks
如何获取该路由的ID(URL)

如果我使用这个,我会得到整个URL:

Backbone.history.fragment
更新

这就是我为项目定义路线的方式

@Projectapp.module "ProjectsApp", (ProjectsApp, App, Backbone, Marionette, $, _) ->

    class ProjectsApp.Router extends Marionette.AppRouter
        appRoutes:
            "projects/new" : "newProject"
            "projects/:id" : "showProject"
            "projects/:id/edit" : "editProject"
            "projects" : "listProjects"

    API =
        listProjects: ->
            new ProjectsApp.List.Controller

        newProject: ->
            new ProjectsApp.New.Controller

        showProject: (id, project) ->
            new ProjectsApp.Show.Controller
                id: id
                project: project

        editProject: (id, project) ->
            new ProjectsApp.Edit.Controller
                id: id
                project: project

    App.Router.on "route:newProject", (project_id) ->
        alert project_id

    App.commands.setHandler "new:crew:member", (region) ->
        API.newCrew region

    App.vent.on "project:new:clicked", (project) ->
        App.navigate "projects/new", true

    App.vent.on "project:tasks:clicked", (project) ->
        App.navigate "projects/#{project.id}/tasks", true

    App.vent.on "project:created", (project) ->
        App.navigate "projects/#{project.id}", true

    App.vent.on "project:show:clicked project:back:clicked", (project) ->
        App.navigate "projects/#{project.id}"
        API.showProject project.id, project

    App.vent.on "project:clicked project:edit:clicked", (project) ->
        App.navigate "projects/#{project.id}/edit"
        API.editProject project.id, project

    App.vent.on "project:cancelled project:list:back:clicked", (project) ->
        App.navigate "projects"
        API.listProjects()

    App.addInitializer ->
        new ProjectsApp.Router
            controller: API

路由器的定义应与此类似(示例):

然后,可以将路由事件绑定到接受路由变量的函数,例如:

Router.on("route:go_to_page",function(page) {
   // page parameter corresponds to :number in the url hash, so now you can query your models with this string.
});

希望这个例子能帮助

路由器将为处理程序函数提供从URL解析的属性

您有一个使用
“projects/:id:“showProject”
定义的路由,但是您的处理程序是

showProject: (id, project) ->
        new ProjectsApp.Show.Controller
            id: id
            project: project
它们不匹配:路由器将从URL发送解析的
id
,但仅此而已。在将项目传递给视图之前,您需要自己获取项目,例如:

showProject: (id) ->
        project = @projects_collection.get id
        new ProjectsApp.Show.Controller
            id: id
            project: project

当然,这意味着您需要能够访问项目集合,或获取项目等。

啊,太好了,谢谢。我使用project/:id/tasks的原因是,用户单击一个项目,然后获取属于该项目的所有任务的列表。有没有办法获得项目的ID?是的,你可以(在你的路由器中)这样做:
routes:{“projects/:ID/tasks:“do\u something”}
然后:
router.on(“route:do\u something”,函数(project\u ID){//project\u ID是你需要的})希望我正确理解了你的问题…更新了我的问题。我如何将您的解决方案用于我的代码?我不熟悉coffee脚本,但我认为
App.Router.on“route:editProject”,(project\u id)->alert project\u id
应该可以工作编辑:当然,将alert函数更改为您需要的任何功能。。。据我所知,你的问题是获取项目id,对吗?你想在哪里访问它?在特定路由的回调方法中?我想在获取新任务时访问它。您是否可以使用更多代码更新问题,以显示获取新任务的确切位置?
showProject: (id) ->
        project = @projects_collection.get id
        new ProjectsApp.Show.Controller
            id: id
            project: project