我正在创建一个主干视图,用于显示用户在我的webapp中创建的文件夹列表。但是我想在列表中也显示一个默认条目,如no folder。
我不想在视图中插入DOM,只想向集合中添加一个模型,该模型不会同步到服务器,而只是用于在视图中渲染
我有办法做到这一点吗?我试过这个,但失败了
var def = {'name': 'none', 'selected': 'true'};
var coll = new app([def]);
// model here
var appitem = Backbon
我正在使用Express和Backbone.js构建一个站点。我想在前端处理尽可能多的事情
有一件事我很困惑,那就是如何将路由请求延迟到主干网而不是Express。我知道主干网现在可以处理诸如“/this/here”之类的路由,但Express当然会首先解释这一点
最好的办法是什么?我是否应该在Express中创建一个全局路由来处理我没有明确定义的所有内容 我可能完全错了,但是express是服务器端框架,而主干是客户端框架。
从分析传入请求和交付资源的意义上讲,只有服务器端框架负责路由
我认为
我正在设置主干同步机制,有点困惑在哪里为模型生成id
当我创建一个新模型时,主干网是否应该生成和设置id,或者我应该实现一个id生成方法,或者是否有某种机制将数据“放入”服务器,它生成id并返回id为的模型?我从您的问题中了解到,您希望有一个包含服务器上存在的模型的集合。为了将这些模型放入集合中,您必须在集合中添加调用'fetch()'
url应该是“/users”或类似的东西,必须返回一个包含用户数据的对象数组。然后,数组中的每个项都将传递给UserCollection.add()。好吧,实际
我已经定义了一个模型和一个集合,由于我的数据库中已经有记录,我希望在页面加载时显示应用程序中的所有记录
我尝试使用Backbone.sync,但在Chrome调试模式下仍然看到一个空集合
My Backbone.js代码:
(由于模板依赖性,我不得不删除一些代码)
以下是我在Backbone.sync之后的集合中看到的内容:
d
_byCid: Object
_byId: Object
length: 0
models: Array[0]
__proto__: x
您可能不应该直接调用sync
举个例子:我有一个视图,它依次显示带有过滤器的视图(用户可以选择显示书籍、杂志或两者)和带有项目的列表。
过滤器和列表都有相应的模型。过滤器-我们可以过滤什么。列表-所有项目的列表
用例:用户看到完整列表,然后可以通过仅选择所需类别来过滤结果
问题:
这两种观点应该如何互动?他们应该相互了解还是应该由父视图处理
谁应该存储要显示的筛选列表?它可以是直接的列表子视图模型,或者父视图可以过滤完整的列表,然后将其传递给渲染
对于您的问题,没有一个正确的答案,但我将尝试在这里解释一种常见的惯用方法
两
我正在使用Backbonejs视图中的Easeljs创建一个简单的工程视图。我在侦听器事件中遇到范围问题,例如:
this.stage.addEventListener("stagemousedown", this.handleMouseDown);
我开始这样做是为了回避我的范围问题
var self = this;
this.stage.addEventListener("stagemousedown", function(){
var foo = self.bar;
});
然
我正在对Backbone.js进行我的第一步,我在理解当视图从外部获取undefined或null值时如何设置默认值时遇到了一些问题:
var Status = {
Models: {},
Collections: {},
Views: {},
Templates:{}
}
Status.Models.Message = Backbone.Model.extend({
defaults:{
icon:'path/info-icon.png'
打开此带有Backbonejs的html代码时,Chrome Java脚本控制台将抛出以下错误-uncaught TypeError:无法调用未定义的方法“replace”,
但是当我删除这一行代码时,它包含了下划线模板this.template=..template($('.#listing').html())
从列表\u视图的初始化方法中,其工作正常。为什么使用下划线模板会引发错误??
这是密码
<!DOCTYPE html>
<html>
<head>
这就是我正在做的
我的测试脚本
主干视图
描述
当我运行测试脚本并加载url#products时,products视图将呈现到html正文中。我希望测试用例检查视图生成的DOM元素。看起来测试是先运行的,即在视图呈现dom元素之前,因此测试失败。如何确保视图在我的测试运行之前完全呈现?在Mocha中,异步代码应该包含在每个之前的部分中,以确保它在测试之前执行
在您的情况下,请尝试在此部分中重新渲染视图:
beforeEach(function() {
productListView.re
backbone.js的一个已知特性是,当您设置未更改的数据时,它不会触发更改事件,也不会进行验证。但是,当我存储来自存储后端验证结果的AJAX调用的JSON响应时,我需要触发更改事件。如果用户继续提交表单,同时将同一字段留空,那么后端验证将返回相同的JSON结果,并且当我将其保存到模型时,不会触发更改事件
我在AJAX成功回调中尝试了几件事,其中我将数据设置到模型中:
尝试的解决方案#1
尝试解决方案#2
这两种情况都不会导致在发出调用且用户具有相同的JSONResponse时再次触发更改事件
我有一个集合中的现有项,我想用一个不同的url调用fetch,以引入将被合并的其他项
出于某种原因,即使我使用reset:false标志,也会调用reset,我认为这与我的成功回调有关
是否仍然可以禁用重置事件并仍然使用成功回调
我的回执如下所示:
self.collection.fetch({
url: url,
add: true,
reset: false,
success: function() {
self.render();
$('.loa
我有一个主干收集要分类。我正在使用undescore.js函数。下面是我的代码片段
sortedcollection=collectionToSort.sortByfunctionobj{
返回目标成本;
}
但这给我带来了一个错误,obj是未定义的。仅当按以下方式编写代码时,此选项才起作用:
sortedcollection=collectionToSort.sortByfunctionobj{
obj=JSON.parseJSON.stringifyobj;
返回目标成本;
};
我
我在浏览器内存中有三个阵列:
学生=[{studentID:x,firstName:x,lastName:x},{…},{…}]
教师=[{teacherName:x},{…},{…}]
次=[{老师:x,开始:x,结束:x},{…},{…}]
我需要做的是:
呈现学生的下拉菜单
选择学生后,呈现该学生教师的下拉菜单
选择教师后,呈现该教师可用时间段的下拉菜单
我可以使用backbone.js创建所有三个模型、集合和视图,但我无法“连接”它们。我该如何在老师和学生之间嵌套时间?还是有更好的办法
我找不到可以在CompositeView中收听的可用事件记录
collectionEvents: {
"all": "myFunc",
"add": "myFunc",
}
对于每个正在更新的模型,都会调用上述命令
我正在调用与视图关联的集合的fetch,我想知道整个集合何时更新
谢谢
--Justinwylie使用“重置”事件。使用的事件是主干网提供的,您可以在这里找到:谢谢David。那真的很有用。这是同步事件。我还发现,如果处理“all”事件,传递给函数的第一个
我正在使用require.js,并在我的配置文件中调用以下命令来启动应用程序(使用此页面作为参考:):
但是,当它符合要求时(通过grunt.js),它不会加载主干网和jquery,甚至不会列出任何依赖项。但是,如果我删除应用程序,则需要加载主干网和jquery,例如:
require(['backbone', 'jquery'], function(Backbone, $) {
console.log('dependancies loaded');
});
main.js
requi
我真的很困惑,需要帮助。(无关:“我花了36个小时才做完某件事,而这最后一部分简直让我发疯了”)
我的代码
我正在添加完整的代码。你能帮我一点忙吗?你的数据有两个相同id的模型吗?在主干中似乎不太可能。请确认这一点。此外,我真的建议将您的MyListModal更改为主干集合,这在上下文中更有意义。
<body>
<div id="mycontainer" style="margin: 20px; ">
</div>
<script type="tex
我对一件事感到厌倦。已成功触发并执行。下面是代码
ItemView = Backbone.View.extend({
events: {
"click":"onClick"
},
onClick: function() {
//trigger a custom event, passing the view as first argument
Events.trigger('click', this);
}
});
ListView = Backbone.Vie
所以我编译了.Jade到.js。
如何将backbone.js中的.js模板与require.js一起使用?
我试过这样的方法:
define(['marionette'],
function(Marionette) {
return CoreNorthLayout = Backbone.Marionette.Layout.extend({
template: require('/to/folder/templatename')
});
});
但是没有工作,还有什么我可以试试的吗?
我用的是脊梁和木偶
我想对我的集合和渲染视图进行排序
但是奇怪的事情发生了
“/api/note/getList”,它返回(当视图初始化集合时调用)
这是我的收藏
define [
'models/Note'
],
(Note) ->
class NoteCollection extends Backbone.Collection
model : Note
url : '/api/note/getList'
compara
在我的大多数情况下,model.parse是在collection.parse期间调用的。在某些情况下,不会调用model.parse
我在任何情况下都需要它。是否可以将其放置在类似选项中的全局位置:Backbone.emulateHTTP=true
此外,这些文档提供了与model.parse相关的看似冲突的信息
解析(响应、选项)
每当服务器在fetch和save中返回模型的数据时,就调用parse
对比和可能/可能
model.initialize
...
如果将{parse:true}作
我不确定将具有特定属性的集合传递给视图构造函数的正确方法
例如,我的收藏可能是这样的
var theseMessages = window.App.data.messages.where({ chat_id: 2 })
this.messagesView = new MessagesView({ collection: theseMessages });
因此,当我想在我的应用程序中呈现此集合,并且只传递具有聊天id:2的模型时,我认为这样做就足够了
[
{
"chat_id":
在jQuery中,我们可以在执行GET操作时提供json。但我在主干网中看不到任何选项来提供像backbone.collection.create或update这样的对象
collection.fetch({
data: {
ip_id: this.column
},
success: this.constructing
});
这就是我现在能想到的因为这个.column是一个json对象,所以需要对它进行字符串化。试试这个
collection.fet
我从上面的结构中学到,我觉得这样设置ajax错误不是正确的方法
使用主干网和requirejs的正确方法是什么?我就是这么做的。这可能看起来有点老套,但也有道理。这对我来说是这样的:“如果任何API调用都存在权限或身份验证问题,请通过将其重定向到那里来向用户显示拒绝访问页面。”对我来说,我实际上只使用“location.hash=”。如果我决定使用另一个库来处理路由器,那么要真正将jquery与主干网解耦。hi@muhaimin abdul,这有没有办法知道哪个视图、模型或集合称之为ajax?意
我收集了以下结构:
[{Object1}{Object2}]
现在Object1={CollectionA:[{},{}]}和Object2={CollectionB:[{},{}]
如何访问CollectionA或CollectionB?您可以通过以下方式访问它们:
collection
.at(0) //get first element in collection
.get('CollectionA') //get CollectionA property
您还可以通过使
我是个骨子里的新手,这让我发疯:
我用的是脊梁和木偶。
下面是一些代码示例:
var Backbone = require('backbone'),
Marionette = require('backbone.marionette'),
FastClick = require('fastclick');
var MainModule = require('./modules/main'),
HomeModule = require('.
视图通常需要具有以下属性的对象才能渲染:
{ el: '#someelement', model: someModel }
视图还允许我们将模型的事件绑定到视图中的函数:
initialize: function() {
this.model.bind('change', this.renderFromModel, this);
},
render: function() {
$(this.el).html(this.template(this.model.toJSON())
我希望能够在主干模型上调用save(),并让后端返回此模型的整个集合,而不仅仅是模型的更改属性。然后我想更新整个返回的集合。这方面的用例如下所示:
用户有多个地址,可以从此集合中选择发货地址。如果她从集合中选择了不同的发货地址,则应将以前的发货地址更新为“仅另一个普通地址”状态。为此,必须更新整个集合,而不仅仅是更改的模型
这在backbone.js中可能吗
提前多谢 是的,这是可能的。您需要覆盖模型上的sync功能
MyModel = Backbone.Model.extend({
syn
修订问题
collection.reset方法与collection.add方法。两者都将模型列表作为输入。但是,当发出单个“reset”事件时,reset会像这样返回对象
{d,
_byCid: Object,
_byId: Object,
_callbacks: Object,
length: 3,
models: Array[3],
__proto__: x}
但是,add方法返回一个简单的数组,如上面的models:array[n]对象中所示。然后可以很容易地执行类似下面我的示例代码中
我看到很多教程在jQuery加载后初始化主干模型/视图。为什么呢?你以前不能给它下定义吗
例如
jQuery ->
class ListView extends Backbone.View
el: $ 'body'
initialize: ->
_.bindAll @
@counter = 0
@render()
可以在加载文档之前定义类,并在加载文档之后初始化视图/模型吗
我还看到在窗口下定义的模型/视图为什么
wi
我正在用Trigger.io构建一个主干应用程序,当我单击手机工具栏上的后退按钮时,我有点困惑为什么数据会消失
以下是设置:
我有一个视图SearchResultsView,看起来像这样(为了简洁起见删除了Trigger.io代码):
实际上它是这样工作的:当我最初加载页面时,没有结果列表(应该是这样的)。我输入查询并执行搜索,然后它返回,按原样填充列表。然后,我将单击一个项目转到另一个视图,当我单击“上一步”时,列表再次为空
我试图做的是测试集合是否仍然存在,如果仍然存在,继续重新呈现列表,但
我正在开发一个应用程序,其中一个模板呈现一个有n行的表。现在,在每一行中,我都有一列,列中有编辑和删除等按钮
单击“编辑”时,某个分区的同一窗口中会出现一个编辑表单。该表单需要使用从后端获取的值填充
这里面没什么了不起的。
我的问题是:
我有一个使用以下模板结构呈现完整表的视图:
<script type="text/template" id="ledgersing">
<div class="span6 widget">
<div class="widg
我在为一个有骨气的问题挠头
我有一个主干视图,其中包含一个调用保存当前模型的函数的事件
这是一个简单的表单,在视图中,我在同步模型之前做了一些验证
this.model.save({
completed : completed,
company : company,
revenue : revenue,
term : term,
comments : comments,
probability : probability
},
{
我有一个模型链接到两个子模型,如下所示:
var SubModel = Backbone.Model.extend({
defaults: {
headline: null,
image_url: null,
url: null
}
});
var MainModel = Backbone.Model.extend({
defaults: {
subModelA: null,
subMode
我对主干网很陌生,我正在阅读,以它为例创建一个待办事项列表。我不明白为什么这段代码不起作用:
var Todo= Backbone.Model.extend({
defaults: {
title : "",
completed : false
},
initialize: function(){
console.log("model initialized");
如果我在我的集合中定义了如下过滤器:
filterByEveryday: function(){
return this.models.filter(
function(c) {
return c.Everyday == true;
})
}
collection: Breakfast.foods.filterByEveryday()
我如何在路线中使用该过滤器来选择每天的早餐
我的路线是这样的(目前正在获取所有食物)
这里有一些问题
我已创建视图以听取模型更改。当模型中发生更改时,将调用“渲染”函数并提示“警报”窗口。但它出现了两次,这意味着由于两个更改事件,渲染函数调用了两次
葡萄酒详情视图
app.WineView=Backbone.View.extend({
这不是因为僵尸视图,因为我有以下代码
Backbone.View.prototype.close=function()
{
alert("closing view "+this);
if(this.beforeClose){
thi
我正在制作一个backbone.marionete演示,用于在项目视图上实现集合。
但它没有正确渲染。我已经创建了一个演示,在我将集合传递给它之后,视图不会在其中呈现
var view2 = new MyItemsView({
collection: options.collection
});
app.mainRegion.show(view2);
以下是JSFIDLE:
如何处理此问题?请改用CompositeView或CollectionView
var te
我是个新手,所以请告诉我正确的方法。以下是我所拥有的:
具有3个输入的主干登录视图:serverIP、用户名和密码。我正在进行所有验证,并根据用户之前必须输入的serverIP向后端主机发送jquery ajax()请求
我的后端是js PHP,使用Slim restful框架,检查用户,密码等常用的基本东西
在成功的ajax()调用的回调中,我想设置urlRoot,以便以后使用所有模型和集合,因为我正在使用Slim进行所有数据库交互以及服务器上的这个PHP文件
我尝试在全局app变量上设置它,
我看过一些关于同一个问题的帖子,但是回复不够或者没有我的正确方向。
因此,我有一个主干集合,当我想从中获取特定的模型时,我希望将cid值传递给.get()函数。但是,通过这样做,我得到了undefined的响应,但是,如果我传入id,那么它工作正常。
他们的文档说cid和id都可以作为参数。你知道怎么做吗
假设我有一个id为5且cid为“abc”的模型。当我写这个时:this.collection.get(5)我得到了所需的模型,但是当我写这篇文章时:this.collection.get('a
简单问题:什么是“仅一次”发起活动的最佳方式?
我有一个收集在主干与多个模型。有时一次更新多个模型的属性,在集合上触发多个“更改”事件
仅触发一次“更改”事件,将所有属性更改分组在一起的最佳方式是什么
目前我的最佳想法是使用计时器,但这只会捕获第一个模型属性更改
我们重视所有建议、想法和解决方案。谢谢:)
背景:
在这种情况下,事件触发一个计算量非常大的函数,因此必须避免多次运行。每当您批量更新模型上的属性时,将{silent:true}作为一个选项传递,该选项将禁止触发任何事件。
然后触发一
在我看来,我有以下主干代码(不是完整代码):
render:function(){
_.each(this.model_admin.getModelPool(),函数(model){
$(“#anydata”)。追加(“”);
view=newapp.Views.ListItemView({el:$(“.list entry”).last(),model:model,admin:this.admin})
view.render();
});
},
App.Views.ListItemView=B
我有两种布局。第一个布局负责呈现一个子布局(由于我的界面相当复杂,很快就会有很多子布局和视图)
以下是第一个布局:
App.module('Layouts', function(Layouts, App, Backbone, Marionette, $, _) {
Layouts.Editor = Backbone.Marionette.Layout.extend({
tagName: 'div',
className: 'content contai
我只是在使用Backbone.Model时遇到了一个奇怪的错误
因此,我的模型声明类似于:
var MyMode = Backbone.Model.extend({
defaults:{
'someList': []
},
initialize: function(){
_.bindAll(this, 'toString', 'castFromString');
},
toString: function(){
return
我似乎无法获得要渲染的子视图模板。它们显示在控制台日志中,并且显示的次数正确,但我无法让它们在浏览器中渲染
目标是父母,步骤是孩子
代码位:
型号:
$(function() {
window.Goal = Backbone.Model.extend({
defaults: {
description: null
},
initialize: function() {
this.steps = new
因此,我已经深入到Backbone.js框架中,我终于开始使用模型/集合
事情是这样的。我使用localstorage作为数据库,我的问题是我不想看到我的ID是这样的:
id : "53ec77a0-8b06-c31b-d72c-a350741898d0"
是否有一个简单的解决方案可以将id设置为更合适的外观,如1、2、3甚至像cid。我用cid尝试过,但也不好,因为每次从localstorage获取数据时,它都会更改
提前谢谢
/Haris嗯,我不知道您为什么要这样做,定义ID并确保其唯一性
我的问题与之非常相似,只是有一个细微的区别,我不想通过jQuery操作DOM
为此,我所做的是:-
假设我的下拉列表类型为UserType
var userType = backbone.Model.extend({
idAttribute: "TypeId",
defaults: {
TypeId: null,
TypeName: null,
Selected: false
}
});
在这里,我创建
我正在使用主干网和木偶网构建一个大型应用程序。我计划使用dust.js,而不是使用下划线模板引擎
我已经找到了一个插件,可以做这项工作,但目前我不知道如何使用require.js。另外,除了使用这个插件,还有更好的方法实现灰尘吗
感谢您的反馈
下面是示例应用程序中的代码
testView.js
测试粉尘
main.js
我是那个插件的作者。基本上,您需要定义三个依赖项
“主干”、“灰尘”和“木偶”在您的Requirejs配置文件中,然后定义
在初始应用程序设置期间,此模块的AMD版本作为木偶后的
这是我的小部件模块:
app.module("Widget.MyWidget", function(MyWidget, app, Backbone, Marionette, $, _) {
this.on("start", function(el){
var that = this;
});
this.on("click", function(el){
alert("click");
});
this.re
我是个新手,所以这可能是个愚蠢的错误。
当我按下发送按钮(#发送电子邮件按钮)时,一封电子邮件会按其应有的方式呈现
但当我再次按下时,没有更多的电子邮件添加。
我得到的唯一日志是:(第二次+推后)
:
换句话说,它甚至不在集合中输入add处理程序。
有人能解释一下为什么以及如何解决这个问题吗
非常感谢!
编辑:如果我删除1封呈现的电子邮件,然后再次按“发送”,则新电子邮件添加正确
此处为相关代码:
$(document).ready(function() {
//email model
我的模型用户设置如下:
User = Backbone.Model.extend({
urlRoot: '/users',
defaults: {
id: '',
username: '',
password: ''
},
idAttribute: '_id',
initialize: function () {
console.log('User initiate
上一页 1 2 3 4 5 6 7 8 9 ...
下一页 最后一页 共 121 页