请容忍我,因为我来自传统的web开发背景,使用ASP.Net,甚至服务器端MVC。我正在尝试使用Backbone.js构建一个高度交互的单页应用程序,以帮助组织我的javascript代码并构建UI
我在构建UI组件以及决定如何处理某些方面的一些概念或方法上遇到了问题。我将使用这个过于简单的屏幕截图作为我提问和讨论的基础
让我们以“待办”应用程序为例(当然),UI非常简单。我有以下“组件”
一个结果列表,显示与当前选定条件匹配的当前待办事项集
我的待办事项列表(个人、工作、博客项目)
到期日
我假设这要么是我代码中的一个bug,要么是backbone.js的一个未记录(据我所知)特性。当我创建我的集合和视图时,集合中已经有一个模型我没有创建,或者我假设由于未定义的id我没有创建。下面是我的代码
// ---------------------------------------------------------- Work Order
window.WO = Backbone.Model.extend({
default: {
wonum: null,
将集合添加到视图时,如下所示:
var View = new MyCollectionView({ collection: new MyCollection() });
new View({collection: c})
new View({collection: c, secondCollection: c2})
一切都很好。我可以在initialize方法中使用此集合(例如,对于绑定事件)。但是我怎样才能再加一个呢
我不能这样做:
var View = new MyCollection
js中的路由器负责路由客户端页面,并根据URL将它们连接到操作和事件。但是如何触发url更改呢?我的意思是,如果唯一的方法是将与页面路由相关联的元素包含在标记中
因为我已经将mousedown和mouseup事件与用于路由的元素相关联,如果我将其放入标记中,mousedown和mouseup事件肯定会变得无效,因为它将与标记的click事件相冲突。那么,还有其他方法进行路由吗?您可以使用:
导航路由器。导航(片段,[选项])
每当您在应用程序中到达要另存为URL的点时,请调用导航,以更新URL。
我正在创建一个这样的模态对话框
window.NewPageModalView = Backbone.View.extend({
template: _.template($('#view-template-new-page-dialog').html()),
el: $('div#main'),
events: {
'click input[type=radio]': 'newPage'
},
newPage: function
我正在使用下划线模板引擎(作为Backbone.js的一部分),但JSON对象的属性中有一个句点,即
{
"id": 1234,
"company.id": 4321
}
当我尝试在下划线模板中访问此内容时,我收到一个JavaScript错误:
Company ID: <@= company.id @>
公司ID:
我想知道是否可能以及如何访问带有句点的属性。我无法更改JSON的生成
cowper一种简单的方法是将另一个对象包裹起来,这样您就可以使用[]访问'company.i
我有一个歌曲列表(每首歌都以专辑封面的形式),可以通过jQueryUI的可排序库进行排序(http://jqueryui.com/demos/sortable/). 所有歌曲都是驻留在单个集合中的模型。当触发“排序”事件时,我想重新计算歌曲的顺序并更新它们各自的索引。我知道如何获取集合中模型的索引,但是否可以更新/设置模型的索引?我意识到我可以在模型上设置一个“order”属性并进行更新,但似乎更新索引会更干净。听起来你想在集合上定义一个,然后在启动小部件的排序事件时调用它。再次查看了该函数,你
当保存或创建被抛向服务器时,服务器会使用随机创建的新对象进行响应。对象可以是许多不同类中的一个,主干响应这些不同的对象并加载一个相对视图
我似乎只能在bootstrap上理解这个逻辑,因为还没有加载任何视图,所以我可以根据随机从服务器接收到的信息,引导并导航到特定路径
然而,当我保存一个对象并接收返回数据时,我一直在试图弄清楚如何做到这一点
这是我的密码
信息已保存。
@model.save(@model.toJSON(),
我有一位听众正在等待此保存:
constructor: (optio
我发现两者的属性和功能几乎相同,那么这两者的主要区别是什么呢
简言之,如果要在集合周围包装模板(例如:带有页眉和页脚的列表),则需要使用CompositeView。CollectionView不知道如何呈现模板。
版本2.x有许多不同类型的视图:视图、项目视图、,
LayoutView、CollectionView、CompositeView
在版本3中,ItemView和LayoutView被“合并”到视图中,并且
不推荐在v4中删除CompositeView。现在我们只有一个观点
和Coll
我使用Backbone.js显示API请求中的项目(站点)列表
我的问题被问了很多似乎,我已经尽可能多地考虑了其他问题的解决方案,但我仍然有一个问题
代码如下:
(function($) {
_.templateSettings = {
interpolate: /\{\{(.+?)\}\}/g
};
// models
var Station = Backbone.Model.extend({
urlRoot: '../api/admin/s
到目前为止,我的模板是:
<script id="table-row" type="x-handlebars-template">
<tr>
{{#each this}}
<td>{{.}}</td>
{{/each}}
</tr>
</script>
任何我的虚拟数据收集:
this.collection = new Backbone.Collect
有一种方法可以做到这一点,那就是在eventDataForevt\uu中有一个属性,表示事件的名称。但是,是否可以在不修改eventDataForevt\uu的情况下执行此操作?查看此小提琴:
在上,似乎无法从您的对象中检测到事件名称-请注意,在这种情况下,事件为真,即使未调用evt\u c
但是,有一个函数将调用事件的名称作为第一个参数传递,因此
obj.on('evt_A evt_B evt_c', function(eventData){
console.log("Is it possib
js的默认行为是将模板附加到区域选择器指定的元素中。然而,我通常不得不创建一个特殊的区域类型,并重写appendHtml函数来替换
这并不太难,但是为什么要将append作为默认值呢
我通常会用一个空div来创建布局模板,以指定区域应该去哪里。然后,在显示该div时,将其替换为子模板
我想我想知道我是否缺少模板的设计模式,使附加更直观
谢谢你的帮助
更新:
所以我通常会看到一些我想呈现到页面中的内容,并希望在我想要的页面上添加n元素。我将使用如下所示的javascript:
ReplaceReg
我有一个应用程序,旨在重新创建一个标准的网站,包括标准页面和一个新闻模块,其中列出了类别和文章。访问新闻时,将显示新闻页面中的内容,以及类别列表或文章列表。在这种情况下,当您查看新闻页面时,将显示(2)个类别
在Chrome、Firefox和IE上,我可以在我的页面之间单击,然后返回到新闻——进入类别、项目列表,然后是文章,然后返回到主条目新闻页面。视图(用于主条目页面)始终显示正确的HTML。然而,在Windows和ipad上的Safari中,虽然一切都会好一点,但最终(或者更早!)新闻条目页
当我试图将条目变量从一个视图传递到另一个视图时,我得到的条目在第二个视图中是未定义的
这是我的观点
append_post: function(post){
view = new Stream.Views.PostEntry({entry: post});
$("#stream-bank").append(view.render().el);
}
这是我的入职后视图
Stream.Views.PostEntry = Backbone.View.extend({
MenuView.js
events: {
"click ul li": "MenuClick"
},
MenuClick: function (e) {
var elm = e.currentTarget;
return elm.firstChild.innerText;
},
define(['underscore', 'backbone', '../Collection/MenuCol'], function (_, Backbone, MenuCol) {
var
我有一个物体像-
var obj = { prop1 : 2,
prop2 : [] ,
prop3 : {}
};
var obj = Backbone.Model.extend({
prop1 :2,
prop2 : [] ,
prop3 : {}
}) ;
在这里,我不想让obj像我们一样成为主干模型
var obj = Ba
我在几个地方读到过,调用Backbone.history.navigate函数被认为是不好的做法
例如,Addy Osmani sais在他的书《开发主干网.js应用程序》中写道
Router.navigate()也可以触发沿途的路由
通过传递trigger:true选项更新URL片段。
注意:不鼓励这种用法
或者德里克·贝利在他甚至说:
大多数情况下,您不应该从应用程序中执行路由的处理程序
但我真的不明白背后的原因,还有什么更好的解决办法
在我看来,使用trigger:true选项调用nav
我有一个使用Backbone.Validations插件的简单模型
var LocationModel = Backbone.Model.extend({
validation: {
location_name: {
required : true,
msg : 'A name is required for the location'
}
} // end validation
});
var test = new Lo
我当前的代码如下所示:
define([
'jquery',
'underscore',
'backbone',
'marionette',
'templates',
'gridView',
'detailView',
'detailModel'
], function ($, _, Backbone, Marionette, JST, GridView, DetailView, DetailModel) {
'use s
所以我今天第一次开始研究backbone.js。我最想做的事情之一就是将模型属性绑定到有用的控件上。我的问题实际上是如何将各个模型属性绑定到控件
我举了一个例子,在这个例子中,您可以将任何模型的集合绑定到一个表,选择要忽略的属性,但是我觉得我没有采取正确的方法。我们的想法是最终扩展它,使表像数据网格一样可编辑。我已将此添加到JSFiddle@
我使用助手函数为模型生成模板。这用于生成表格标题和行数据
//helper function to loop through a model's att
我有两个模型,用户和图片。用户有很多图片。我想对图片的后端服务器查询进行挂起调用。当前,当我点击暂停按钮时,我得到了用户模型,但我想要图片模型。在我的用户视图中,我有以下代码
用户视图
class MyApp.Views.User extends Backbone.View
initialize: ->
@listenTo(@model, 'change', @render)
@listenTo(@model, 'destroy', @remove)
rend
我是个新手。我试图在服务器上保存模型,但它给了我
错误:
[HTTP/1.1 403 Forbidden 1010ms]
我缺少什么
我的代码是:
<script type="text/javascript" >
var UserModel = Backbone.Model.extend({
url:'http://192.168.1.3:8080/app/profile/astro'
});
var user=new UserModel();
我有一个像这样的主干模型
我有一个模板,可以在表单中打印出地址。模板由在其“render”函数中传递地址id的视图呈现。通过类似于“address/:id”的路由到达视图
视图如下所示:
var AddressView = Backbone.View.extend({
el: $('#myclass'),
render: function(options) {
var that = this;
var addr = new A.add
所以我试图学习如何使用
但是我被困在事件部分,当我点击页面类内容时,它应该会提醒“页面标记已被点击”,但它会在注释行上抛出一个错误
<body>
<div class="page"></div>
</body>
<script type="text/javascript">
var View = Backbone.View.extend({
initialize: function()
只是想得到一些基本的路由和运行。看过很多例子后,我认为下面的代码应该可以工作,但是当我运行时,我得到一个错误“无法获取未定义或空引用的属性'doChat'。初始化顺序是否有误
require(["marionette", "jquery.bootstrap", "jqueryui"], function (Marionette) {
window.App = new Marionette.Application();
App.start();
我是主干网新手,我发现自己编写的视图依赖于选项的值来正常工作。换句话说,我的选项是强制性的。这听起来不对,所以我想知道我是否误用了选项参数,如果是这样,还有什么更好的方法呢?依赖注入是一种不错的做法。这实际上是一种常见的做法,尤其是处理视图。它还使您更容易对视图进行单元测试。因此,使用选项获取构建视图所需的一些属性完全可以。也许你可以分享一些你认为错误的例子
在我的主干应用程序中,我正试图使用Lodash(下划线)中的..union-方法合并集合
因此,我有以下几点:
var myCollection = _.union([carsCollection], [motorcycleCollection], [bikeCollection]);
当我执行console.log(collection)时,它会给我[child,child,child],其中每个子包含集合中的模型数组及其属性。到目前为止,我的问题是:
如何在视图中显示此内容?我试过:
th
在编写主干/木偶应用程序之前,我正在尝试构建它。我真的想让它变得非常模块化(也就是说,我希望能够为网站拉一些嵌套的功能并插入它们。我希望所有的路由都能立即初始化,这样我就可以为页面添加书签了。不过,我正在努力设置它
是否有人找到了一个好方法来设置一个应用程序,在这个应用程序中,审批者可以加载模块中的所有路由,但可以有效地延迟加载其余内容?很难用任何简短的形式来解释。我强烈建议观看backbonerails.com的所有剧集。他展示的方式非常棒如何模块化你的应用
我有一个按钮列表,而这些按钮是通过车把模板显示的
<button class="providesolution" id="btn{{issue_id}}" ><small>Post</small></button>
我尝试了很多方法来获取id,但它显示未定义。
有人能帮我吗?
提前感谢。主干将事件作为第一个参数传递给事件处理程序,您可以从事件数据结构中获取导致事件的元素,如下所示:
providesolution: function(e) {
我正在使用Browserify(有点像AMD)
在查看事件处理程序时,在验证密码后,我想向路由器发送一条消息“login\u success”,以更改路由
在路由“login_success”处理程序中,我想调用route.navigate(“/newRoute”),它是从主干扩展的函数
但我还没有弄清楚如何将消息从视图发送到路由器。任何人都可以共享示例代码或链接吗
在主干网中是否有更改路由的最佳实践
谢谢 最直接的方法就是使用
如果你希望有一些地方导航机构,你可以
App.execute("n
我一直在使用带提线木偶的主干来服务我的单页web应用程序,但如果在视图中出现此错误。核心控制器和助手中的一切都很好,但却出现了此错误
TypeError: view.on is not a function in backbone.marionette
我的代码是用咖啡脚本编写的这是我在helpers中使用的代码块
class AppHelper
home: ()->
require['cs!views/home', 'cs!main'], (Home, App)->
主干路由器是否可能识别出它运行的URL是不同的
我需要在散列爆炸之前更改应用程序的行为
/成员#登录
vs
/成员/利益#关于(需要应用程序在此处表现不同)如果您想根据不属于散列的url控制应用程序的行为,您应该使用。否则主干路由器只处理散列后的部分。在这种情况下,您可以自己实现逻辑。可能的重复不是重复。我不是在问主干网能否在hashbang之前检测到路由。不是如何获取window.location.href.Backbone是一个JS库,使用JS在URL中获取您想要的任何内容并从那里开始。这里
我有一个使用api保存到数据库的模型。我的问题是更新此模型时。第一次更改任何内容并调用model.save时,属性将作为JSON传递给api,api将解析并保存它,而不会出现任何问题。现在,我第二次在同一视图中对该模型进行更改时,model.save将一个未定义的对象添加到我的模型中。api看到此对象并拒绝PUT请求
为什么它与第一次更新一起工作,而与第二次更新不一起工作
谢谢你的帮助
这是代码,希望你能理解
var LDAccount = Backbone.Model.extend({
我有一个滑块,每个滑块包含6个视频,所以我有一个视频集合
现在,我需要将集合拆分为块,每个块有6个视频,并为每个块渲染一个视图(一张幻灯片)
我对此有点困惑,因为我对主干网还不熟悉,我发现主干网中很少有“正确”的做事方式
我的解决方案:(感谢Josh Leitzel)
第一张幻灯片显示3个视频,每隔6个
render: ->
$(@el).html(@template())
count = 0
passed_first_slide = false
win
不确定它是在我这边还是在zombie.js上,但我似乎无法让这个非常简单的zombie.js脚本在我的主干应用程序上运行。是完全出于我的考虑,还是zombie.js在主干应用程序中表现不佳是一个众所周知的问题?我也在用战俘http://pow.cx/ 在相关的情况下,通过myapp.dev连接到应用程序
任何建议或带有主干的zombie.js示例都将非常有用
Browser = require "zombie"
assert = require "assert"
browser = new B
我偶然发现了一些带有requirejs的主干应用程序。有一件事看起来很奇怪。无论何时他们需要在我的模块中引用主干、下划线或jquery,我都必须要求他们:
define([
'jQuery',
'Underscore',
'Backbone',
'collections/projects',
], function($, _, Backbone, ProjectsCollection, projectsListTemplate){
var projectListView =
因此,我试图实现的是,当用户想要编辑/查看一个项目(模型)时,我将它们发送到一个URL,创建一个新的模型实例并调用。在加载相关视图并将其交给新模型之前获取它
出于各种原因,我需要知道用户是否正在编辑或查看项目(模型),因此我的第一次尝试是:
app.Models.Quote = Backbone.Model.extend({
idAttribute: 'Number',
initialize: function() {
this.editMode = fals
任何人都可以帮我找到问题所在,我的代码到底发生了什么
我得到的错误如下:
Uncaught SyntaxError: Unexpected token <
我的HTML:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,Chrome=1"
我有一个主干模型,它通过requirejs加载了一些依赖项。我用这种方式处理它,是为了绕过Require.js的循环依赖性问题。(我们有多个需要模型、集合和视图的文件,其中一些是循环文件。)
问题在于,模型上设置的属性(this)在require语句之外显示为未定义的属性。代码如下:
define(["jquery", "backbone"],
function($, Backbone) {
var Model = Backbone.Model.extend({
ini
我第一次使用backbone.js,但无法正常启动事件。有人能解释一下我做错了什么吗
非常感谢
在“我的html”底部加载的app.js中:
var Discussion = Backbone.Model.extend({
defaults: {
id: null,
title: 'New discussion'
},
urlRoot: '/api/discussion'
});
var DiscussionCollection = Ba
下面的backbone collection.fetch代码会因某种原因触发错误,然后跳转到错误处理程序(如预期的那样),但我不知道errorhandler参数是什么。触发错误时,模型、xhr和选项参数未定义。我做错了什么
var onErrorHandler = function(model, xhr, options) {
alert(options);
};
that.collection = new MembersCollection([]);
that.
我一直在使用木偶网编写我的应用程序,但我对应用程序扩展失败感到有点困惑
在木偶中似乎没有办法做这种事情:
var SuperApplication = Backbone.Marionette.Application.extend({
'modules': {
'foo': function (module, app) {
// module definition
},
'bar': function (module,
在主干中,在视图上执行.remove()之后,我仍然能够通过console.log访问events对象,这正常吗
var View = Backbone.View.extend({
initialize : function () {
console.log("hey");
},
events: {
"click ul#products li a": "item"
}
});
var vi = new
在my view.js中,我调用了葡萄酒列表tpl模板,如下所示。但索引页上没有显示任何内容。请帮忙
在index.html中
我已经在本地存储中添加了一些数据,我只想将这些数据显示到特定的div元素中
在酒单视图中,我得到了所有这些数据。意思是当我写作时,console.logthis.model.get'name';我得到了我想要的数据,但我只想通过模板将这些数据显示给那个特定的div。我应该怎么做,请建议。这就是您的代码应该如何获得预期的结果
var WineLists = Backbon
有一个地址视图,它呈现一个包含基本地址字段的表单,包括邮政编码文本框和城市/郊区下拉列表。理想情况下,当用户键入邮政编码时,“城市”下拉列表应自动填充该邮政编码下的“城市/郊区”值。我知道有人已经提出了一个关于级联下拉列表的问题,但是这在某种程度上是不同的,我希望通过调用HTTP Get请求来获取城市/郊区的值
如何使用backbone.js实现它?我做了一些事情,但我觉得这是错误的。我所做的是添加了一个函数,该函数将填充一个集合,并在调用更新下拉列表的宏时将该集合作为参数返回。代码如下
Add
我正在读这篇文章,并看一些例子。我的数据结构似乎适用于此,但我想看看这是否真的应该用于复合视图
我有一个模型上的数据结构,看起来像这样
var myModel1 = {
_id: 798698,
username: "John",
message: {
message1: {message: "Some cool messsage", sent: "3/22/2014 12:20"},
message2: {message: "I'm ma
我正在尝试使用以下链接添加表单验证
示例代码工作正常。但在我的例子中,我有一个具有相应视图的表单,当我单击submit按钮时,如何验证
在视图的initialize中,我添加了以下代码以启用字段验证
var user = new User;
$('input').each(function() {
new Field({el: this, model: user});
});
this.model.set({route: formData.route}, {validate: true,
关于grunt/Cachebasting有几个问题,但我没有找到足够接近我所寻找的东西。因此,一个新的问题
这就是我要找的。我的主干网/木偶应用程序的JS文件被组织到模块级文件夹中
|-应用程序
|- modules
|- module1
|- scripts
|- models
|- views
|- templates
|- module2
|- scripts
|- models
我将主干用于视图、引导和后端作为SpringRESTWeb服务。
我想使用SpringRESTWebServices将一个文件从主干视图上传到服务器。
任何引用???现代浏览器都可以通过AJAX上传文件,而旧浏览器则不能。
如果您需要支持IE
1 2 3 4 5 6 ...
下一页 最后一页 共 119 页