在流星中有一个视图有两个控制器文件可能/可以吗?

时间:2014-12-06 01:45:35

标签: javascript meteor spacebars

所以继承我客户端的文件夹结构: https://s3.amazonaws.com/f.cl.ly/items/0I0S063e3U0A2o2s3k21/Image%202014-12-05%20at%206.42.17%20PM.png

问题是我有两个状态参加锦标赛......一个是Live,一个是NoLive。 使用所有完全相同的视图,但可能具有非常不同的功能。

根据视图需要在铁路由器或其他东西中加载的数据,我是否可以使用两个完全不同的控制器用于同一视图?

-Thanks

以下是我的参考:

tourneys的routes.js:

/* Tournaments / Browse section */

Router.route('/tournaments/:_id', function () {
    this.fastRender = true;
    // add the subscription handle to our waitlist
    this.wait(Meteor.subscribe('campaigns'));
    // this.ready() is true if all items in the wait list are ready
    // console.log("Tournaments.findOne({_id: this.params._id}:", Campaigns.findOne({_id: this.params._id}));
    if (this.ready()) {
        this.render('tournament', {
            data: function () {
                return Campaigns.findOne({_id: this.params._id});
            }
        });
    } else {
        this.render('loading');
    }
});

tournaments.js:

/* Globals */

Template.tournament.rendered = function () {
    var self = this;
    var participants = $('.participant-id');
    var currentParticipant;
    var nextRound;
    var thisMatch;
    var nextMatch;
    var bracket;
    participants.map(function(index, value){
        if ($(value).text() === Meteor.userId()) {
            if ($(value).parent().find('.participant-status').text() === 'undetermined') {
                nextRound = $(value).parent().find('.participant-round').text();
                thisMatch = $(value).parent().find('.participant-match').text();
                bracket = $(value).parent().parent().parent().find('.participant');
            };
        };
    });
    nextRound = parseInt(nextRound) + 1;
    nextMatch = Math.round(parseInt(thisMatch)/2) - 1;
    if (parseInt(thisMatch) % 2 != 0) {
        currentParticipant = 0;
    }else{
        currentParticipant = 1;
    }
    var winnerOptions = '';
    var winnerBox = $('<div class="select-winner">');
    bracket.map(function(index, value) {
        winnerOptions += '<span class="winner-option"> '+$(value).find('.participant-title').text()+' <div class="winner-info"> '+$(value).find('a').html()+' </div> </span>'
    });
    winnerBox.append(winnerOptions);
    $($($('.round'+nextRound).find('li')[nextMatch]).find('.participant')[currentParticipant]).removeClass('loser').addClass('undetermined');
    $($($('.round'+nextRound).find('li')[nextMatch]).find('.participant')[currentParticipant]).find('a').addClass('tooltip').html(winnerBox);

    var tournamentStartTime = function(){
        var d = new Date();
        var n = d.getTime();
        var currentTime = TimeSync.serverTime(n);
        var startTime = self.data.card.startTime;
        var difference = startTime - currentTime;
        var hoursDifference = Math.floor(difference/1000/60/60);
        difference -= hoursDifference*1000*60*60
        var minutesDifference = Math.floor(difference/1000/60);
        difference -= minutesDifference*1000*60
        var secondsDifference = Math.floor(difference/1000);
        /* if ends (make tournament live server side?) */
        if (hoursDifference < 0 || minutesDifference < 0 || secondsDifference < 0) {
            Meteor.clearInterval(tStartTime);
            Session.set("tournamentStartTime", false);
        }else{
            if (hoursDifference   < 10) {hoursDifference   = "0"+hoursDifference;}
            if (minutesDifference < 10) {minutesDifference = "0"+minutesDifference;}
            if (secondsDifference < 10) {secondsDifference = "0"+secondsDifference;}
            var formattedTime = hoursDifference + ':' + minutesDifference + ':' + secondsDifference;
            Session.set("tournamentStartTime", formattedTime);
        }
    };
    Session.set("tournamentStartTime", '00:00:00');
    tournamentStartTime();
    var tStartTime = Meteor.setInterval(tournamentStartTime, 1000);

};

Template.tournament.events({

    // Select winner from 2 options in tooltip
    // Then previous round is given winner class on correct person
    'click .winner-option': function(event){

    //  var self = $(event.target)
    //  var winner = self.text()
    //  self.parent().hide()
    //  self.closest('.participant').removeClass('undetermined')
    //  self.parent().siblings('.participant-title').text(winner)

    //  var classes = self.closest('ul').prev().attr('class')
    //  $('.' + classes.substring(0, classes.indexOf(' ')) + ' .participant-title').each(function() {
    //      if ($(this).text() === winner) {
    //          $(this).parent().parent().removeClass('loser').addClass('winner')
    //      }
    //      // else {
    //      //  $(this).parent().parent().removeClass('winner').addClass('loser')
    //      // }
    //  });
    //  // $(.previousULClass .
        $('#theaterMode').show();
    }

});

Template.tournament.helpers({
    round: function() {
        var tournament = this.tournament.brackets;
        var rounds = tournament.length;
        var results = [];
        tournament.map(function(value, index){
            var currentRound = index + 1;
            results.push({rounds: rounds, currentRound: currentRound, matches: value});
        });
        // console.log("results:", results);
        return results;
    },
    match: function(){
        // console.log("matches:", this.matches);
        return this.matches;
    },
    participant: function(){
        var results = [];
        // console.log("this:", this);
        this.map(function (value, index) {
            // console.log("value, index:", value, index);
            var type = value['win'];
            var obj = {
                id: value['id'],
                rank: value['id'].slice(0,3),
                displayName: value['displayName'],
                thisRound: value['round'],
                thisMatch: value['match'],
                status: type
            };
            if (type === true || type === 'undetermined') {
                obj.winner = true;
            }else{
                obj.loser = true;
            }
            results.push(obj);
        });
        // console.log("results:", results);
        return results;
    },
    tournamentStartTime: function(){
        return Session.get('tournamentStartTime');
    }
});

1 个答案:

答案 0 :(得分:0)

您如何识别哪个州是最新的?你应该发布一些代码,routes.jstournament.js和你的view.blade,以便更好地了解你真正想做的事情,并弄清楚,最好的实践是什么。 :)