小编Sam*_*off的帖子

如何在Backbone中正确使用事件

我正在构建一个三向选择器:公司,部门和用户.

在此输入图像描述

我试图找出在我的Backbone应用程序中构建它的最佳方法.这是我现在遇到的问题.

假设用户选择了一家公司.然后,将填充部门和用户集合,并且视图将更新:

在此输入图像描述

然后,用户可以从列表中选择一个部门,这将进一步细化用户选择.我工作得很好.

或者,用户可以直接进入用户列表并找到用户(无需先指定部门).在这种情况下,部门和用户的视图需要更新:

  1. 该部门应该在用户部门中被选中.
  2. 用户应该优化所选用户部门中的所有用户,而不是所选公司中的所有用户.

我正在努力做最好的方法.到目前为止,我departmentsusers收藏品都有一个selected属性,这就是我维持状态的方式.目前我正在做类似的事情

  • 当用户选择部门时,部门视图
    1. 直接在departments集合上设置选定的部门
    2. 触发事件
    3. 用户集合会听到事件,清除所有选定的用户,并触发另一个事件
    4. 用户视图会听到事件并重新呈现.由于它知道部门集合,因此它知道已经选择了一个部门,并且应该将用户细化到部门

我这样做是因为如果我让视图只触发事件(没有首先设置部门选择属性),我就会遇到竞争条件:部门和用户集合都会响应事件,并且取决于用户的时间可能没有得到适当的改进.

第二部分:

  • 当用户选择用户(未指定部门)时,用户视图
    1. 直接在users集合上设置所选用户
    2. 直接在departments集合上设置选定的部门(它知道)
    3. 触发事件

这就是我被困住的地方.部门集合实际上不需要做任何事情,因为它的选定属性已经是正确的; 实际上,它的视图只需要重新渲染.用户的观点也是如此.

但这不是全部,因为还有很多其他事情可能发生.我觉得它失控了.

  • 什么是最好的结构?
  • 我正确使用活动吗?
  • 您如何处理需要了解其他观点和其他集合的视图?

更新:我应该只使用路由来保存应用程序状态吗?这可以简化事情......

更新2: 这个问题对我有帮助.拥有一个单独的模型来管理国家肯定是要走的路.

更新3:拥有一个单独的模型来存储状态+使用jQuery延迟是惊人的.认真.它完成了我.

backbone.js

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

在ember数据中建模没有id的对象

我正在为会计部门构建仪表板应用程序.

用户将选择一个月,并查看当月符合特定条件的所有公司.路线将是

/:month_id                         a summary page
/:month_id/companies               more details about each company
/:month_id/companies/:company_id   all details about a single company
Run Code Online (Sandbox Code Playgroud)

理想情况下,我有一个month模型hasMany company模型.唯一的问题是,公司将在几个月内出现.

如果我错了,请纠正我,但这是不是意味着如果公司已经在商店,当要求新的月份时,它将从商店而不是服务器获取该公司的数据?每个月的数据会有所不同,所以这对我不起作用.

我想在这个应用程序中,每个公司的id都是他们的正常,整数id加上选定的月份.因此,解决这个问题的方法之一就是给每个公司一个像'15-Mar-2013'.

或者,我可以companies通过原始数据传递每个月的数据,并在plain数组上进行转换.但问题是,我必须计算公司的总量(除了整个月),将这两件事分开是很好的.如果我有一个完全独立的公司模型,我可以在模型中去城镇:

App.Company = DS.Model.extend({
    month: DS.belongsTo('App.Month'),
    name: DS.attr('string'),
    contracts: DS.hasMany('App.Contract'),

    totalRevenue: function() {
        return this.get('contracts')
            .filterProperty('type', 'newSetup')
            .getEach('feeChange').reduce(function(accum, item) {
                return accum + item;
            }, 0);
    }.property('contracts.@each.feeChange'),

    ...additional aggregation functions
});
Run Code Online (Sandbox Code Playgroud)

你怎么看?

ember.js ember-data

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

如何检查一个对象是否是 jQuery 事件

相关:检查对象是否是 jQuery 对象

我有一个 object x,运行console.log(x)Chrome 的调试器后向我显示:

在此输入图像描述

如何检查是否x正在jQuery.Event使用 JavaScript?(我已经尝试过了Object.getPrototypeOftoString并且obj.constructor)。

javascript jquery

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

ReferenceError:无法找到变量:在http:// localhost:7357/assets/test-loader.js,第3行定义

我正在将我的Ember CLI插件从0.1.9升级到0.2.0,并在运行时遇到此错误ember test --server:

ReferenceError:无法找到变量:在http:// localhost:7357/assets/test-loader.js,第3行定义

ember serve工作,我可以/tests在浏览器中访问,但其他东西似乎打破了testem /幻像设置.

我已经升级了Phantom,并且经历ember init了几次差异,但我仍然必须遗漏一些东西.

ember-cli

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

过滤数据的最佳做法

我看到它的方式,在使用过滤器构建动态图表时,每次用户请求过滤后的数据我都可以

  1. 执行一个新的MySQL查询,并使用MySQL进行过滤.

    SELECT date,
      SUM(IF( `column` = `condition`, 1, 0)) as count
      ...
    
    Run Code Online (Sandbox Code Playgroud)
  2. 执行一个新的MySQL查询,并使用服务器端语言(在我的情况下为PHP)进行过滤.

    function getData(condition)  {
      $resultSet = mysqli_query($link, "SELECT date, column ... ");
    
      $count = 0;
      while ($row = mysqli_fetch_assoc($result_set)) {
          if ($row['column'] == 'condition') {
              $count++;
          }
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 最初执行单个MySQL查询,将所有数据传递给客户端,并使用Javascript&d3进行过滤.

我希望答案不是黑白的.例如,如果几乎没有请求某个过滤器,则让其他95%的用户等待相关数据可能没有意义,因此过滤器将需要新的数据调用.但我真的在考虑边缘情况 - 过滤器经常使用的情况,但是特殊情况.在这种情况下,将过滤逻辑放在前端,后端或数据库查询中是否更好?

d3.js

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

如何指定数据库进行逆向工程?

我正在按照本指南对逆向工程数据库进行操作.该指南说它使用该paramters.yml文件作为数据库参数,但我怎样才能覆盖它?我在我的网站上列出了几个连接config.yml,我希望能够选择其中一个连接.

symfony doctrine-orm

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

大数据集使我的浏览器崩溃

我正在将大约 80,000 行的数据集加载到我创建的时间序列图表对象中,这导致我的浏览器崩溃。

我认为这对于 d3 来说不应该是一个问题,因为这个 Crossfilter 示例使用数十万行的数据集进行了演示。(尽管数据正在聚合,而我正在绘制每个点的图表)。

我不知道如何调试这个。Chrome 没有给我任何有用的消息,Google 结果也很少。有任何想法吗?

d3.js crossfilter

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

如何编写可读的子程序哈希参数?

在工作中,我们喜欢将参数作为哈希引用传递给子例程:

my $manager = DatabaseManager->new({
    'sHost'     => 'my_host',
    'sDatabase' => 'some_database'
});
Run Code Online (Sandbox Code Playgroud)

对象本身有一个init函数,如下所示:

sub _init
{
    my ($self, $phArgs) = @_;

    $self->{_sHost}     = $phArgs->{sHost};
    $self->{_sDatabase} = $phArgs->{sDatabase};
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以整理一下吗?即使只是第一行可以更清楚,我认为这是一个改进.就像是

sub _init
{
    my ($self, ($host, $database) ) = @_;

    $self->{_sHost}     = $host;
    $self->{_sDatabase} = $database;
}
Run Code Online (Sandbox Code Playgroud)

然后很清楚子程序需要什么.有任何想法吗?

perl

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

如何从另一个"需要"的控制器初始化控制器?

说我有两个控制器,一个CompaniesController和一个IndexController.事实证明,我的Index路线所需的所有数据都来自于CompaniesController.所以,我已经指定了IndexController这样的:

App.IndexController = Ember.ArrayController.extend({
    needs: 'companies',
});
Run Code Online (Sandbox Code Playgroud)

如果CompaniesController已经初始化,这很有效,但是我第一次访问该网站时呢?CompaniesController是空的.

所以,我需要CompaniesController从内部初始化数据IndexController.我该怎么做呢?

ember.js

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

自定义验证器与Ember简单验证+ Ember CLI

我正在尝试编写自定义身份验证器,类似于文档中此示例中的身份验证器.目标是能够通过检索当前登录的用户session.user.

我正在使用Ember CLI,所以initializers/authentication.js我有

import Ember from 'ember';

var customAuthenticator = Ember.SimpleAuth.Authenticators.Devise.extend({
  authenticate: function(credentials) {
    debugger;
  }
});

export default {
  name: 'authentication',

  initialize: function(container, application) {

    Ember.SimpleAuth.Session.reopen({
      user: function() {
        var userId = this.get('user_id');
        if (!Ember.isEmpty(userId)) {
          return container.lookup('store:main').find('user', userId);
        }
      }.property('userId')
    });

    // register the custom authenticator so the session can find it
    container.register('authenticator:custom', customAuthenticator);

    Ember.SimpleAuth.setup(container, application, {
      routeAfterAuthentication: 'landing-pages',
      authorizerFactory: 'ember-simple-auth-authorizer:devise'
    });
  }
};
Run Code Online (Sandbox Code Playgroud)

当我尝试进行身份验证时,出现以下错误:

TypeError: Cannot read property 'authenticate' of undefined …
Run Code Online (Sandbox Code Playgroud)

ember-cli ember-simple-auth

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