BackBone.JS Отображение подробного представления элемента в коллекции - PullRequest
0 голосов
/ 13 сентября 2011

Я только начинаю использовать Backbone.js, мне удалось вернуть список элементов с сервера, но я застрял на следующем шаге, когда щелкают по элементу подробный вид модели.отображается.В маршрутизаторе я попытался создать маршрут с именем «show: id»: «show», но он не выбирает маршрут внутри моего контроллера MVC внутри приложения ASP.NET MVC3, которое украшено глаголом [HttpGet].Хорошим началом было бы просто запустить метод show, когда я нажал app.navigate ('show / 1', true) в консоли.

 EventDate = Backbone.Model.extend({
    idAttribute: "eventDateID"
});
EventDates = Backbone.Collection.extend(
    {
        model: EventDate,
        url: "WebPortal.MVC/Api/EventsAttending"
        //url: "WebPortal.MVC/events/list"
    });
eventDates = new EventDates();

EventsListView = Backbone.View.extend(
    {
        initialize: function () {
            _.bindAll(this, 'render');
            this.template = $("#yourevents-template");
            this.collection.bind("reset", this.render);
            window.ViewModel = this.model;
        },

        render: function () {
            var html = this.template.tmpl(this.collection.toJSON());
            $(this.el).html(html);
            return this;
        }
    });




var EventsAdmin = Backbone.Router.extend({
    initialize: function () {
        eventsListView = new EventsListView({ collection: eventDates, el: ".yourEvents tbody" });
    },
    routes: {
        "": "index",
        "/Show/:id": "Show"
    },
    index: function () {
        eventsListView.render();
    },
    Show: function (id) {
        $('#show').html("The id is " + id);
    }



 });


> jQuery(function() {

    eventDates.fetch({
            success: function() {
                //creater the router
                window.app = new EventsAdmin();
                Backbone.history.start();
            },
            error: function() {
                //display a nice error page
            }
        });
});

Ниже приведен код моего контроллера

[HttpGet]
        public ActionResult Index(int userid = 1)
        {
            var FindEvents = new FindEventsByAttendeeRequest { UserID = userid };
            var model = _eventsService.FindEventsByUserID(FindEvents).EventFound;

            return Json(model.Select(c => new
                            {
                                c.EventDate.Event.Description,
                                c.EventDate.Event.Title,
                                c.EventDate.StartDate,
                                userid,
                                eventDateID = c.EventDate.ID,
                                VenueName = c.EventDate.Venue.Name,
                                c.EventDate.VenueID,
                                eventID = c.EventDate.Event.ID,
                                attendeeID = c.ID
                            }).OrderBy(o => o.StartDate).Where(u => u.StartDate.Date >= DateTime.Today), JsonRequestBehavior.AllowGet);
    }

    [HttpGet]
    public ActionResult Show(int ID)
    {
        var FindAttendee = new GetAttendeeRequest {Id = ID};
        var model = _eventsService.GetAttendees(FindAttendee);

        return Json(model);
    }

1 Ответ

1 голос
/ 14 сентября 2011

Во-первых, помните, что маршруты на клиенте полностью отделены от маршрутов на вашем сервере.Это маршруты, которые реагируют на изменения хеша (# в адресной строке).Они не отображаются на маршруты на сервере.

Если вы хотите, чтобы эти маршруты запускались, вы должны создать привязку в вашем EventsListView, которая будет выглядеть примерно так:

<a href="#/Show/12345">Show Event 12345</a>

Надеюсь, это то, что вы имели в виду, запустив маршрут.

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...