Backbone.js无法正确呈现视图

NN796

我也是Ruby on Rails和骨干网的新手。我在骨干和红宝石中有一个现有的代码,可以很好地工作,它创建了一些板,一个板有很多列表,依此类推。如果需要,我还将提供该代码。现在,我要添加一些类别的功能,例如用户可以创建和删除类别,并且每个类别都有许多面板。正确的数据库浏览器上显示以下数据。我无法正确理解为什么浏览器上未显示正确的视图。

分类页面

以下是代码。请建议我进行一些代码更改,以使其起作用。我们将不胜感激。提前致谢。

/app/assets/javascripts/collections/categories.js

Kanban.Collections.Categories = Backbone.Collection.extend({
  model: Kanban.Models.Category,
  url: "/categories",
});

app / assets / javascripts / models / category.js

Kanban.Models.Category = Backbone.RelationalModel.extend({

  urlRoot: "/categories",

	relations: [{
		type: Backbone.HasMany,
		key: "boards",
		relatedModel: "Kanban.Models.Board",
		collectionType: "Kanban.Collections.Boards",
		reverseRelation: {
			key: "category"
		}
	}]

});

app / assets / javascripts / views / categories / categories_index.js

Kanban.Views.CategoriesIndex = Backbone.View.extend({
  template: JST['categories/index'],
  tagName: "section",
  className: "categories-index",

  events: {
    "submit form.create_category": "createCategory"
  },

  initialize: function () {
    var that = this;
    that.collection.on("all", that.render, that);
  },

  render: function () {
    var that = this;

    var renderedContent = that.template({
      categories: that.collection
    });

    that.$el.html(renderedContent);

    console.log("categories ka render");
    return that;
  },

  createCategory: function (event) {
    event.defaultPrevented();
    var that = this;

    // get form attrs, reset form
    var $form = $(event.target);
    var attrs = $form.serializeJSON();
    $form[0].reset();

    var category = new Kanban.Models.Category();

    // fail if no category name
    if (!attrs.category.name) {
      var $createContainer = $("div.create_category");
      var $nameInput = that.$el.find("input.category_name");

      $nameInput.hide();
      $createContainer.effect("shake", {
        distance: 9,
        times: 2,
        complete: function () {
          $nameInput.show();
          $nameInput.focus();
        }
      }, 350);
      return false;
    }

    // save list
    category.save(attrs.category, {
      success: function (data) {
        // category.get("users").add(Kanban.currentUser);
        that.collection.add(category);

        // keep focus on list input
        that.$el.find("input.category_name").focus();
      }
    });
  }

});

app / assets / javascripts / routers / main_routers.js

Kanban.Routers.Main = Backbone.Router.extend({
  initialize: function (options) {
    this.$rootEl = options.$rootEl;
  },

  routes: {
    "": "index",
    "/login": "login",
    "categories/:id": "showCategoryBoards",
    "boards/:id": "showBoardLists"
    //"boards/:id": "deleteBoard"
  },

  index: function () {
    var that = this;

    var categoriesIndex = new Kanban.Views.CategoriesIndex({
      collection: Kanban.categories
    });
    
    that.$rootEl.html(categoriesIndex.render().$el);
  },



//index: function () {
    //var that = this;

    //var boardsIndex = new Kanban.Views.BoardsIndex({
      //collection: Kanban.boards
    //});
    
    //that.$rootEl.html(boardsIndex.render().$el);
  //},



  showCategoryBoards: function (id) {
    var that = this;

    var category = Kanban.categories.get(id);
    var categoryShow = new Kanban.Views.BoardIndex({
      model: category
    });

    that.$rootEl.html(categoryShow.render().$el);
  },



showBoardLists: function (id) {
    var that = this;

    var board = Kanban.boards.get(id);
    var boardShow = new Kanban.Views.BoardShow({
      model: board
    });

    that.$rootEl.html(boardShow.render().$el);
  }

});

app / assets / javascripts / kanban.js

window.Kanban = {
  Models: {},
  Collections: {},
  Views: {},
  Routers: {},
  initialize: function() {
    var that = this;

    that.$rootEl = $("#content");

    Kanban.currentUser = new Kanban.Models.CurrentUser();
    Kanban.currentUser.fetch({
      success: function (response) {
          // console.log("got user");
          
        Kanban.category = new Kanban.Models.Category();
        Kanban.category.fetch({
          success: function (response) {   

            Kanban.boards = new Kanban.Collections.Boards();
            Kanban.boards.fetch({
              success: function (response) {
                // console.log("got boards");
                new Kanban.Routers.Main({ $rootEl: that.$rootEl });
                Backbone.history.start();

               }
             });
          },

          error: function (response) {
            // console.log("please log in");
          }
        });
      }
    });
  }
};

$(document).ready(function(){
  Kanban.initialize();


});


//BOARD DELETION METHOD... !
$(document).on("click", ".delete-icon", function() {
  var board_id = $(this).parent().attr('id');
  $.ajax({
    url: "/api/boards/"+board_id,
    type: 'DELETE',
    success: function(result) {
      $("#"+board_id).remove();
    }
  });
});

//LIST DELETION METHOD... !

$(document).on("click", ".list-delete-icon", function() {
  var listId = $(this).parent().attr('id').replace(/list_/, '');
  // alert(listId);
  //var id = $("div").attr('id').replace(/button/, '');
  $.ajax({
    url: "/api/lists/"+listId,
    type: 'DELETE',
    success: function(result) {
      alert("success!!!");
      $("#list_"+listId).remove();
    }
  });
});

//card DELETION METHOD... !

应用程序/资产/模板/类别/index.jst.ejs

<header class="categories-index">
  <span class=""></span>
  <h2>My Categories</h2>
</header>
<div>
<ul class="nav pull-left navbar-nav">
  <% categories.each(function (category) { %>
    <li id="<%= category.id %>" class="boxes">
      <a href="/#categories/<%= category.id %>">

        <%= category.escape("title") %>
      </a>
      
      <div class="delete-icon">
        <span class="glyphicon glyphicon-trash">
      </div>

    </li>
  <% }); %>
<li class="boxes">
    <p>Create New Category</p>
    <form class="create_category" id="myform">
      <input type="text" 
             id="customInput"
             class="category_name"
             name="category[title]"
             placeholder="Category Name ..." />
      <input type="text"
             class="category_description"
             name="category[description]"
             placeholder="Category Description ..." />
      <input type="submit" value="Create Category" />
    </form>
</li>
</ul>
</div>

/ app / controllers / categories_controller

class CategoriesController < ApplicationController
  # before_action :set_category, only: [:show, :edit, :update, :destroy]

  respond_to :json

  def index
    @categories = Category.all
    # respond_with(@categories)
    # @categories = current_user.categories.includes(:boards)
  end

  def show
    respond_with(@category)
  end

  def new
    @category = Category.new
    respond_with(@category)
  end

  def edit
  end

  def create
    category = Category.new(params[:category])

      if category.save

        # board.members << current_user
        render json: category, status: :ok
      else
        render json: category.errors, status: :unprocessable_entity
      end
  end

  def update
    @category.update(category_params)
    respond_with(@category)
  end

  def destroy
    @category.destroy
    respond_with(@category)
  end

  private
    def set_category
      @category = Category.find(params[:id])
    end

    def category_params
      params.require(:category).permit(:title, :description)
    end
end

应用/型号

class Category < ActiveRecord::Base
    attr_accessible :title, :description
    has_many :boards, dependent: :destroy
end

应用程序/视图/类别/index.rabl

collection @categories
attributes :id, :title, :description

config / routes.rb

Kanban::Application.routes.draw do



  devise_for :users
  resources :users

  # root to: "categories#index"  


  root to: "root#index"
  resource :root, only: [:index]

  resources :categories

#  resource :session, only: [:new, :create, :destroy]
   #get "login" => "sessions#new"
  # get "logout" => "sessions#destroy"

  # resources :users, only: [:show]

  namespace :api do

    resources :users, only: [:show] do
      collection do
        get :current
      end
    end

    resources :boards, only: [:index, :show, :create, :update, :destroy]

    resources :lists , except: [:edit] do
      collection do
        post :sort
      end
    end

    resources :cards, except: [:edit] do
      collection do
        post :sort
      end
    end

    resources :card_comments, only: [:index, :create, :destroy]
  end
end
混搭

您正在尝试在CategoriesIndex文件中初始化“集合”而不是“模型”

initialize: function () {
var that = this;
that.collection.on("all", that.render, that);

这是从Route文件调用具有collection的构造函数中调用的

index: function () {
var that = this;

var categoriesIndex = new Kanban.Views.CategoriesIndex({
  collection: Kanban.categories,

});

that.$rootEl.html(categoriesIndex.render().$el);
},

因此,请参阅您的kanban.js文件

它应该是:

Kanban.categories = new Kanban.Collections.Categories();
Kanban.categories.fetch({

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Backbone.Marionette-视图无法正确呈现

来自分类Dev

如何正确渲染Backbone.js视图

来自分类Dev

使用Backbone.js进行首次查看后,Google Map无法正确呈现

来自分类Dev

使用Backbone.js进行首次查看后,Google Map无法正确呈现

来自分类Dev

Backbone.js视图

来自分类Dev

Backbone.js呈现Collection View问题

来自分类Dev

Backbone.Marionette-显示方法无法正确呈现..出了点问题

来自分类Dev

LocalStorage Backbone.js

来自分类常见问题

Backbone js .listenTo与.on

来自分类Dev

Backbone.js设置

来自分类Dev

Backbone.js子视图未清除

来自分类Dev

使用Backbone进行多个异步ajax调用后呈现视图

来自分类Dev

如何清除 Backbone 僵尸视图

来自分类Dev

在Backbone视图中收听嵌套的Backbone关系模型事件

来自分类Dev

Backbone.js-无法正确传递模型的属性以进行正确查看

来自分类Dev

让Backbone.js提琴工作

来自分类Dev

Backbone.js PushState True

来自分类Dev

Backbone.js渲染延迟?

来自分类Dev

在Backbone.js上查询

来自分类Dev

Backbone.js模型发布

来自分类Dev

Backbone.js JSON结构

来自分类Dev

让Backbone.js提琴工作

来自分类Dev

Backbone.js PushState True

来自分类Dev

用BACKBONE JS路由Cakephp

来自分类Dev

Backbone JS 滚动事件处理

来自分类Dev

在Backbone中创建收藏夹列表视图的正确方法

来自分类Dev

Backbone.js:从子视图访问父视图?

来自分类Dev

Backbone.js:从子视图访问父视图?

来自分类Dev

无法使Backbone Picky正常工作(模型无法正确扩展)