我真的很喜欢Backbone,但我最难做的事情看似简单.我感谢以下示例的任何帮助.
我有一个模型,标准,我想用来存储我的UI中的一些项目的状态.有一些简单属性,一个属性是一个ID数组,用于存储用户在UI中选择的标记的ID.
所以,我创建了一个新实例.我在tags数组中添加了一些项目.然后,我想重新开始,创建一个新实例,分配给同一个变量.但是,我的标签数组继续保存我作为第一个Criteria实例的一部分添加的信息.
我已经记录了下面的测试用例.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
<script src="Scripts/Libraries/jquery-1.6.1.js" type="text/javascript"></script>
<script src="Scripts/Libraries/underscore.js" type="text/javascript"></script>
<script src="Scripts/Libraries/backbone.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
$(function () {
// Simple model to hold some state about my UI.
var Criteria = Backbone.Model.extend({
defaults: {
"status": "Normal",
"priority": "Normal",
"tags": new Array()
}
});
// Create new criteria.
window.criteria = new Criteria();
// The length of the tags array should be 0. PASSES
console.log("Expect 0: Actual " + …Run Code Online (Sandbox Code Playgroud) 我正在使用Handlebars.js模板引擎,并试图找到一种方法来做这样的事情(人为的例子):
{{#if itemSelected "SomeItem"}}
<div>This was selected</div>
{{/if}
Run Code Online (Sandbox Code Playgroud)
这itemSelected是一个如此注册的助手:
Handlebars.registerHelper("itemSelected", function(item) {
var selected = false;
// Lots of logic that determines if item is selected
return selected;
});
Run Code Online (Sandbox Code Playgroud)
尝试将此语法用于模板时出现错误,我找不到任何显示此类事物的示例.我确实看到像这样简单的#if块......
{{#if myValueInContext}}
<div>This will show if myValueInContext results in a truthy value.</div>
{{/if}}
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何解决第一个例子.也许我正在接近这个错误.
顺便说一句,我标记了这个Mustache,因为我无法在问题中添加Handlebars标签.
我试图让gulp工作以帮助自动化一些单元测试.我有以下gulp文件.
var gulp = require('gulp'),
mocha = require('gulp-mocha');
gulp.task('unit', function() {
return gulp.src('test/unit/**/*.js')
.pipe(mocha({ reporter: 'spec' }))
.on('error', handleError);
});
gulp.task('watch', function() {
gulp.watch(['src/**/*.js', 'test/unit/**/*.js'], ['unit']);
});
gulp.task('test', ['unit', 'watch']);
Run Code Online (Sandbox Code Playgroud)
当我运行'gulp unit'时,测试运行正常.
当我运行'gulp test'时,测试运行,看起来'watch'正在运行.如果我对其中一个测试文件进行了更改,则测试会重新运行,并考虑我在测试文件中所做的更改.
如果我对源文件进行了更改,测试也会重新运行,但它们不会针对源文件的更新版本运行.
我的想法是,不知何故,源文件正在缓存,但我找不到任何似乎遇到此问题或找到解决方案的人.
感谢您帮助这个Gulp/Node/Mocha新手!
我有一个Backbone模型,其属性是对另一个Backbone模型的引用.例如,Person具有对Address对象的引用.
Person
FirstName
LastName
Address
Street
City
State
Zip
Run Code Online (Sandbox Code Playgroud)
这些是扩展Backbone模型的类.那么,如果我构造一个像下面这样的对象......
var address = new Address({ Street: "123 Main", City: "Austin" });
var person = new Person({ FirstName: "John", Address: address });
Run Code Online (Sandbox Code Playgroud)
我似乎无法弄清楚如何在我的Mustache模板中访问它.
Hi {{FirstName}}, you live in {{Address.City}}.
Run Code Online (Sandbox Code Playgroud)
显然不起作用.当我查看Firebug中的内部时,Address是一个对象,但City是Address的属性对象中的一个属性.我找不到任何关于如何访问关联对象的属性的示例.
我感谢任何帮助!谢谢!
我正在尝试使用Mongoose模型测试我用来保存小部件的服务功能.我想在我的模型上存根保存实例方法,但我无法找到一个好的解决方案.我见过其他建议,但似乎都没有完整.
这是我的模特......
// widget.js
var mongoose = require('mongoose');
var widgetSchema = mongoose.Schema({
title: {type: String, default: ''}
});
var Widget = mongoose.model('Widget', widgetSchema);
module.exports = Widget;
Run Code Online (Sandbox Code Playgroud)
这是我的服务......
// widgetservice.js
var Widget = require('./widget.js');
var createWidget = function(data, callback) {
var widget = new Widget(data);
widget.save(function(err, doc) {
callback(err, doc);
});
};
Run Code Online (Sandbox Code Playgroud)
我的服务很简单.它接受一些JSON数据,创建一个新的小部件,然后使用"save"实例方法保存小部件.然后它根据保存调用的结果回调传递错误和doc.
当我调用createWidget时,我只想测试它({title:'Widget A'})...
为了单独测试这个,我可能需要......
我无法弄清楚如何用Sinon做到这一点.我已经尝试过在SO页面上找到的几个变种而没有运气.
笔记:
感谢您的任何帮助,您可以提供.
我的问题涉及这个UI示例.

管理各种UI视图组件的"选定"状态的方法有问题.例如,我有上面的菜单,用户可以从中进行各种选择.这些选择应该导致菜单本身的更新(HL选择的项目)并且还导致结果的更新,这将基于所做的选择.此外,菜单有不同的规则.例如,您一次只能选择一个"列表",但可以选择多个"标签".
我正在考虑的一种方法是创建一个支持UI"选择"状态的Backbone模型.例如,我可以拥有一个包含此信息的模型SearchCriteria.然后,当用户在UI中做出选择时,我可以更新此模型.我可以让各种视图组件监听此模型中的更改(以及主数据模型中的更改.)然后,视图将通过更新哪些项目显示为已选择来更新其可视状态.
我在这种方法中遇到的一个问题是谁应该负责更新项目的选定状态.例如,在标签列表中,我可能会定义以下部分......
我是不是该...
很抱歉这么多问题.我只是很难转向这种发展模式.
我正在使用PJAX,它适用于简单的示例,但我需要能够使用PJAX请求执行一些高级操作.
我有以下......
var people = [{ first: "John", last: "Doe" }, { first: "Jane", last: "Smith" }];
$("a.sheet-link").pjax("#content");
$('#content').on('pjax:beforeSend', function (e, jqXHR, settings) {
// Modify ajax request here?
// Would like to append the people array to data
// Would like to POST rather than GET
// May need to change content-type to "application/json".
});
Run Code Online (Sandbox Code Playgroud)
我尝试了各种方法......
所有尝试都给了我各种问题.
我不知道为什么这么难.任何帮助将不胜感激!
TypeScript新手问题.在我们的项目中,我们使用了一些外部JavaScript库,我们需要添加*.d.ts文件.我理解这个用例以及我们需要这样做的原因.
但是,对于我们自己定义的接口,我的一个开发人员建议我们在*.d.ts文件中定义它们,以便我们可以访问接口类型而无需将其导入需要使用它的模块中.
例如,我们想为"错误优先回调"函数创建一个接口,以便我们可以在许多方面重用它.
而不是这个......
export function helloWorldEventually(callback: (err: Error, result: any) => void) {
callback(null, 'Hello World');
}
Run Code Online (Sandbox Code Playgroud)
我们可以为错误第一次回调定义一个接口,就像这样......
export interface ErrorFirstCallback {
(err: Error, result: any): void;
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它......
export function helloWorldEventually(callback: ErrorFirstCallback) {
callback(null, 'Hello World');
}
Run Code Online (Sandbox Code Playgroud)
首先,我刚刚在ErrorFirstCallback.ts中定义了ErrorFirstCallback接口,并导入它以便引用它.
另一位开发人员建议我们输入一个*.d.ts文件,然后我们就不需要导入它来引用它.
我们定义的接口何时应该在*.d.ts文件和*.ts文件中定义.
谢谢!
当我来自传统的Web开发背景,使用ASP.Net,甚至服务器端MVC时,请耐心等待.我正在尝试使用Backbone.js构建一个高度交互的单页面应用程序来帮助组织我的javascript代码并构建UI.
我遇到了一些概念或构建UI组件的方法,并决定如何处理某些方面.我将使用这个过度简化的屏幕截图作为我的问题和讨论的基础.

我们以"TO-DO"应用程序为例(当然.)UI非常简单.我有以下"组件"......
期望的功能
数据模型
我发现有几种与"数据"相关的模型.这些很容易识别.
如何存储UI状态?
这是我遇到麻烦的地方.我想显示当前选中菜单(左侧)中的哪些项目.我当然可以听取事件并在选择项目时添加"选定"类,但我也有规则,例如"一次只能选择一个列表",但是可以选择"任意数量的标签"一时间 此外,由于待办事项列表菜单和标签菜单是动态的,因此它们已经与ToDoListCollection和TagCollection模型相关联.它们根据这些"数据模型"的状态进行渲染.
那么,如何使用Backbone处理所有这些不同视图的UI状态管理?我感谢任何想法或建议.
谢谢!
我正在努力进行双向多对多映射,其中订单在一方很重要,而另一方则不重要.
我有两个班:课程和学生.
一个程序有很多学生,顺序很重要.
计划A.
方案B.
学生有很多课程,但这里的顺序并不重要.
约翰*计划A*计划B.
出击
赛斯
亚历克斯
艾米
所以,似乎我会在程序和学生之间建立双向的多对多关联,我可以做这样的事情......
var john = GetJohn();
var programCount = john.Programs.Count; // 2
var programB = GetProgramB();
var studentCount = programB.Students.Count; // 4
var secondStudent = programB.Students[1]; // Seth
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何使映射工作.我一直得到PK违规错误.
我试过以下......
程序映射
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Program" table="Programs" lazy="false">
<id name="ID" column="ID" type="Int32" unsaved-value="0">
<generator class="identity" />
</id>
<property name="Title" column="Title" type="String" length="200" />
<list name="Students" …Run Code Online (Sandbox Code Playgroud) 我正在评估我正在构建的应用程序使用Azure表存储,我想得到一些建议...
该应用程序是一个针对个人用户的任务管理Web应用程序.这是一个非常简单的应用程序.它有以下实体......
我们还将构建一些我需要考虑的功能/要求......
由于CRUD工作繁重,而且我们确实有一个简单实体列表,因此使用ATS是可行的.但是,我担心更新的交易成本,以及我所描述的查询/过滤是否能得到有效支持.
我们想象数字从小开始(〜数百个账户,每个账户数百或数千个任务),但我们显然希望增加我们的账户.
如果我们选择ATS,最好是......
我知道这是一个很长的帖子,但如果有人对方向有任何想法或想法,我将不胜感激!
假设我有以下代码......
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++)
{
MyCustomClass myObj = new MyCustomClass();
sb.Append(myObj.RenderShortString());
}
Console.Write(sb.ToString());
Run Code Online (Sandbox Code Playgroud)
并假设MyCustomClass是一个非常大的对象.例如,假设它创建并保存一个包含1MB字符串的内部成员.RenderShortString()方法只是呈现一个长度约为100个字符的字符串.
注意这循环10000次.
我有一些基本上像这样的东西导致循环内部的System.OutOfMemory异常.
我的问题与垃圾收集器清理为每个myObj实例分配的内存空间有关.我不认为我遇到了StringBuilder的问题,但我可能错了.我感觉myObj的实例正在内存中分配,但是在退出循环之后才能进行清理.它是否正确?如果是这样,我怎么能告诉应用程序一旦我得到我的渲染字符串,我就完成了那个实例?
javascript ×5
backbone.js ×4
node.js ×3
unit-testing ×2
ajax ×1
azure ×1
c# ×1
gulp ×1
hibernate ×1
mocha.js ×1
mongoose ×1
mustache ×1
nhibernate ×1
orm ×1
pjax ×1
sinon ×1
typescript ×1