小编Kev*_*vin的帖子

Backbone.js处理属性是数组

我真的很喜欢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)

javascript backbone.js

35
推荐指数
3
解决办法
2万
查看次数

在Handlebars模板中的If块中调用帮助器

我正在使用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标签.

javascript client-templates handlebars.js

31
推荐指数
4
解决办法
2万
查看次数

Gulp,Mocha,观看不重新加载我的源文件

我试图让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新手!

javascript unit-testing mocha.js node.js gulp

14
推荐指数
1
解决办法
2593
查看次数

从胡子模板访问嵌套的骨干模型属性

我有一个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的属性对象中的一个属性.我找不到任何关于如何访问关联对象的属性的示例.

我感谢任何帮助!谢谢!

model-associations mustache backbone.js

12
推荐指数
3
解决办法
8261
查看次数

用Sinon保存Mongoose模型的实例方法

我正在尝试使用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'})...

  • 使用传递给服务函数的数据调用Widget构造函数一次
  • 新创建的窗口小部件对象上的save实例方法被调用一次
  • EXTRA CREDIT:保存实例方法为错误调用null,为文档调用{title:'Widget A'}.

为了单独测试这个,我可能需要......

  • 模拟或存根Widget构造函数,以便它返回我作为测试的一部分创建的模拟小部件对象.
  • 存储模拟小部件对象的保存功能,以便我可以控制发生的事情.

我无法弄清楚如何用Sinon做到这一点.我已经尝试过在SO页面上找到的几个变种而没有运气.

笔记:

  • 我不想将已经构造的模型对象传递给服务,因为我希望服务是唯一"知道"mongoose的东西.
  • 我知道这不是最大的交易(只是通过更多的集成或端到端测试来测试它,但是找出解决方案会很好.

感谢您的任何帮助,您可以提供.

javascript unit-testing mongoose node.js sinon

10
推荐指数
1
解决办法
4519
查看次数

Backbone.js在UI中管理UI状态/处理选择的方法

我的问题涉及这个UI示例.

在此输入图像描述

管理各种UI视图组件的"选定"状态的方法有问题.例如,我有上面的菜单,用户可以从中进行各种选择.这些选择应该导致菜单本身的更新(HL选择的项目)并且还导致结果的更新,这将基于所做的选择.此外,菜单有不同的规则.例如,您一次只能选择一个"列表",但可以选择多个"标签".

我正在考虑的一种方法是创建一个支持UI"选择"状态的Backbone模型.例如,我可以拥有一个包含此信息的模型SearchCriteria.然后,当用户在UI中做出选择时,我可以更新此模型.我可以让各种视图组件监听此模型中的更改(以及主数据模型中的更改.)然后,视图将通过更新哪些项目显示为已选择来更新其可视状态.

我在这种方法中遇到的一个问题是谁应该负责更新项目的选定状态.例如,在标签列表中,我可能会定义以下部分......

  • 标签(代表标签的模型)
  • TagCollection(表示标签集合的集合)
  • TagMenuView(代表可供选择的标签菜单的视图)
  • TagMenuItemView(表示菜单中单个项目的视图)

我是不是该...

  • 在TagMenuItemView上设置事件监听器以进行单击,然后尝试处理1)更新SearchCriteria模型,以及2)更新菜单的可视状态,例如所选项目?
  • 或者,我是否应该使用更高级别的视图(TagMenuView)监听用户选择标记等事件,并在那里执行工作?
  • 此外,此示例中的标签菜单允许选择多个项目,但列表菜单一次只允许选择一个列表.这个"UI"规则(或者这是否真的是与搜索相关的业务规则?)将在何处执行?例如,如果我在每个单独的列表菜单项上听取了单击事件,我当然可以更新该项目的可视状态,但是,我还需要确保更高级别的菜单视图取消选择任何其他所选列表.那么,管理视图中的待办事项列表菜单的"UI"状态会更好吗,这些菜单代表整个菜单(ToDoListMenuView)而不是每个菜单项视图?

很抱歉这么多问题.我只是很难转向这种发展模式.

backbone.js

9
推荐指数
1
解决办法
2911
查看次数

将数据附加到PJAX请求

我正在使用PJAX,它适用于简单的示例,但我需要能够使用PJAX请求执行一些高级操作.

  1. 我想在每个PJAX请求中附加一些数据.我想追加的数据实际上是一个对象数组.见下面的例子.
  2. 我可能需要使用POST而不是GET来进行ajax调用.
  3. 我可能需要将content-type更改为"application/json".

我有以下......

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)

我尝试了各种方法......

  • 使用jQuery.ajaxSetup设置一些默认值(我可以设置数据,但是不会附加_pjax数据元素;我试图将类型设置为POST,但这并没有坚持.)
  • 尝试修改beforeSend处理程序中的jqXHR对象
  • 尝试修改beforeSend处理程序中的设置对象

所有尝试都给了我各种问题.

我不知道为什么这么难.任何帮助将不胜感激!

ajax pjax

8
推荐指数
1
解决办法
6281
查看次数

应该在*.d.ts文件中定义TypeScript接口

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文件中定义.

谢谢!

javascript node.js typescript

8
推荐指数
2
解决办法
2551
查看次数

如何使用Backbone处理单页应用程序的UI状态

当我来自传统的Web开发背景,使用ASP.Net,甚至服务器端MVC时,请耐心等待.我正在尝试使用Backbone.js构建一个高度交互的单页面应用程序来帮助组织我的javascript代码并构建UI.

我遇到了一些概念或构建UI组件的方法,并决定如何处理某些方面.我将使用这个过度简化的屏幕截图作为我的问题和讨论的基础.

在此输入图像描述

我们以"TO-DO"应用程序为例(当然.)UI非常简单.我有以下"组件"......

  • 结果列表,显示与当前所选条件匹配的当前待办事项集
  • 我的待办事项列表清单(个人,工作,博客项目)
  • 截止日期过滤器列表(今天,明天,本周,下周)
  • 标签列表(错误,功能,想法,跟进)
  • 一个搜索框

期望的功能

  • 每当任何搜索条件发生变化时更新结果(选择列表,选择到期数据,选择一个或多个标签,输入搜索文本等)
  • 用户可以编辑,添加和删除列表.(在这个模拟中没有真正显示)
  • 用户可以编辑,添加和删除标签.(在这个模拟中没有真正显示)
  • 用户可以编辑,添加和删除待办事项.(在这个模拟中没有真正显示)

数据模型

我发现有几种与"数据"相关的模型.这些很容易识别.

  • ToDo(代表单个待办事项)
  • ToDoCollection(代表待办事项的集合)
  • ToDoList(代表单个待办事项列表)
  • ToDoListCollection(表示待办事项列表的集合)
  • 标记(代表单个标记)
  • TagCollection(表示标签的集合)

如何存储UI状态?

这是我遇到麻烦的地方.我想显示当前选中菜单(左侧)中的哪些项目.我当然可以听取事件并在选择项目时添加"选定"类,但我也有规则,例如"一次只能选择一个列表",但是可以选择"任意数量的标签"一时间 此外,由于待办事项列表菜单和标签菜单是动态的,因此它们已经与ToDoListCollection和TagCollection模型相关联.它们根据这些"数据模型"的状态进行渲染.

那么,如何使用Backbone处理所有这些不同视图的UI状态管理?我感谢任何想法或建议.

谢谢!

backbone.js

4
推荐指数
1
解决办法
2143
查看次数

NHibernate双向多对多映射列表/包

我正在努力进行双向多对多映射,其中订单在一方很重要,而另一方则不重要.

我有两个班:课程和学生.

一个程序有很多学生,顺序很重要.

计划A.

  1. 约翰
  2. 出击
  3. 赛斯

方案B.

  1. 亚历克斯
  2. 赛斯
  3. 艾米
  4. 约翰

学生有很多课程,但这里的顺序并不重要.

约翰*计划A*计划B.

出击

  • 计划A.

赛斯

  • 计划A.
  • 方案B.

亚历克斯

  • 方案B.

艾米

  • 方案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)

nhibernate orm hibernate

4
推荐指数
1
解决办法
6308
查看次数

用于Web应用程序的Azure表存储设计

我正在评估我正在构建的应用程序使用Azure表存储,我想得到一些建议...

  1. 这是否适用于应用程序,或者
  2. 如果我应该坚持SQL,和
  3. 如果我选择ATS,那么对于存储设计来说,这将是一个很好的方法.

该应用程序是一个针对个人用户的任务管理Web应用程序.这是一个非常简单的应用程序.它有以下实体......

  • 帐户(每个用户都有一个帐户.)
  • 任务(显然用户创建任务.)
  • TaskList(用户可以将他们的任务组织到列表中.)
  • 文件夹(用户可以将其列表组织到文件夹中.)
  • 标记(用户可以为任务分配标记.)

我们还将构建一些我需要考虑的功能/要求......

  • 我们最终将为不同的帐户提供相互共享列表的功能.
  • 用户需要能够以各种方式过滤他们的任务.例如...
    • 特定列表的任务
    • 标有"A"和"B"的特定列表的任务
    • 明天到期的任务.
    • 在所有列表中标记为"A"的任务.
    • 我分享的任务.
    • 任务说明中包含"hello"的任务.
    • 等等.
  • 我们的应用程序是AJAX-heavy,对任务进行非常小的更改时会发生更新.因此,有很多小的请求和更新正在进行中.例如...
    • 内联编辑
    • 点击完成
    • 更改截止日期
    • 等等...

由于CRUD工作繁重,而且我们确实有一个简单实体列表,因此使用ATS是可行的.但是,我担心更新的交易成本,以及我所描述的查询/过滤是否能得到有效支持.

我们想象数字从小开始(〜数百个账户,每个账户数百或数千个任务),但我们显然希望增加我们的账户.

如果我们选择ATS,最好是......

  • 每个实体一个表(帐户,任务,任务列表等)
  • 每个客户的表集(JohnDoe_Tasks,JohnDoe_TaskLists等)
  • 其他想法?

我知道这是一个很长的帖子,但如果有人对方向有任何想法或想法,我将不胜感激!

data-modeling azure azure-sql-database

2
推荐指数
1
解决办法
316
查看次数

循环范围和内存问题

假设我有以下代码......

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的实例正在内存中分配,但是在退出循环之后才能进行清理.它是否正确?如果是这样,我怎么能告诉应用程序一旦我得到我的渲染字符串,我就完成了那个实例?

c#

1
推荐指数
1
解决办法
1037
查看次数