小编SET*_*SET的帖子

如何为已定义的页面和记录总数选择数据?

我有一个包含分页数据的表,这是我为每个页面选择数据的方式:

@visitors = EventsVisitor
      .select('visitors.*, events_visitors.checked_in, events_visitors.checkin_date, events_visitors.source, events_visitors.id AS ticket_id')
      .joins(:visitor)
      .order(order)
      .where(:event_id => params[:event_id])
      .where(filter_search)
      .where(mode)
      .limit(limit)
      .offset(offset)
Run Code Online (Sandbox Code Playgroud)

另外,要构建表分页,我需要知道记录的总数.目前我的解决方案非常粗糙:

total = EventsVisitor
      .select('count(*) as count, events_visitors.*')
      .joins(:visitor)
      .order(order)
      .where(:event_id => params[:event_id])
      .where(filter_search)
      .where(mode)
      .first()
      .count
Run Code Online (Sandbox Code Playgroud)

所以我的问题如下 - 为当前页面和记录总数选择有限数据的最佳ruby方式是什么?

我注意到如果我做@ visitor.count - 将生成额外的SQL查询:

SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM `events_visitors` INNER JOIN `visitors` ON `visitors`.`id` = `events_visitors`.`visitor_id` WHERE `events_visitors`.`event_id` = 1 LIMIT 15 OFFSET 0) subquery_for_count 
Run Code Online (Sandbox Code Playgroud)

首先,我不明白发送额外查询以获取我们已经拥有的数据的原因是什么,我的意思是在我们从@visitors的数据库获取数据后,我们可以使用ruby计算它而无需发送额外的查询到DB.

第二 - 我认为也许有一些方法可以使用像.total_count这样的东西,它会产生类似的'count(*)'查询但没有那么无用的'限制/偏移'?

ruby ruby-on-rails rails-activerecord

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

ngOptions导致选项具有错误的值

我正在尝试渲染选择框,但它没有按预期工作 - 选项值不正确.我检查了手册,根据它的数组语法(在我的情况下,对象数组)是

select as label for value in array
Run Code Online (Sandbox Code Playgroud)

所以这就是我在做的事情:

数据:

[{"id":"3","name":"asdasd","code":"asdads","group":"2","cost":"0"},{"id":"4","name":"adrf fg df ","code":"dasfasd","group":"2","cost":"0"}]
Run Code Online (Sandbox Code Playgroud)

模板:

<select ng-model="productToBuy" ng-options="item.id as item.id for item in products"></select>
Run Code Online (Sandbox Code Playgroud)

渲染结果:

<select ng-model="productToBuy" ng-options="item.id as item.id for item in products" class="ng-pristine ng-valid">
    <option value="0" selected="selected">3</option>
    <option value="1">4</option>
</select>
Run Code Online (Sandbox Code Playgroud)

我们可以看到,选项值不会设置为项目的ID.

当source是数组时,这可能不是正确的语法,但是在尝试这样的时候我得到相同的结果:

<select ng-model="productToBuy" ng-options="item.id as item.id for (key, item) in products"></select>
Run Code Online (Sandbox Code Playgroud)

我把这段代码放在jsfiddle上.任何帮助赞赏.

angularjs

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

在 THREE.JS 中组合着色器

我正在编写一个着色器来从高度图渲染地形,一切都很顺利,除了在我有了着色器之后我失去了灯光和阴影。这就是地狱痛苦开始的时候。我应该用来THREE.ShaderChunk添加默认着色器块,但不仅仅是添加 - 弄乱我的着色器。

所以经过长时间的谷歌搜索我得出了这个建议

您只需在自定义 ShaderMaterial 的适当位置添加一些片段即可:

// 制服

THREE.UniformsLib[ "shadowmap" ],

// 片段着色器

三.ShaderChunk[ "shadowmap_pars_fragment" ], 三.ShaderChunk[ "shadowmap_fragment" ],

// 顶点着色器

三.ShaderChunk[ "shadowmap_pars_vertex" ], 三.ShaderChunk[ "shadowmap_vertex" ],

但对我来说,这并没有添加灯光和阴影。那么我能想到的最好的办法就是查看ShaderLib.js并尝试使用默认着色器之一的设置。所以我进行了设置lambert并最终得到了以下代码:

        @tileMaterial = new THREE.ShaderMaterial
        uniforms:  THREE.UniformsUtils.merge [
            THREE.UniformsLib[ "common" ],
            THREE.UniformsLib[ "fog" ],
            THREE.UniformsLib[ "lights" ],
            THREE.UniformsLib[ "shadowmap" ],

            {
                "emissive" : { type: "c", value: new THREE.Color( 0x000000 ) },
                "wrapRGB"  : { type: "v3", value: new THREE.Vector3( 1, 1, 1 ) } …
Run Code Online (Sandbox Code Playgroud)

three.js

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

如何传递构造函数数组

如何传递返回某种类型对象的函数数组.换句话说 - 构造函数数组?

我想做的是这样的:

    constructor(name: string, systems: Array<Function>){
        this.system = new systems[0]();
    }
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误Cannot use 'new' with an expression whose type lacks a call or construct signature.,据我所知,我应该以某种方式让编译器知道构造函数返回的对象类型,但我不知道如何.

假设RJM的回答,这是我的意思的一个扩展示例:

interface System{
    name: string;
}
interface Component{
    blahblha: string;
}
class Doh implements Component{
    blahblha: string;
}
class Bar implements System{
    name: string = 'bar';
} 

class Blah implements System{
    name: string = 'foo';
}
class Foo {
    systems: Array<System>;
    constructor(bars: Array<()=>System>) {
        for (let i in bars){ …
Run Code Online (Sandbox Code Playgroud)

typescript

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

扩展three.js原生着色器

我编写了一些自定义着色器,但不想丢失phong或 等材料中的所有着色/闪电内容lambert。所以我正在寻找一种扩展原生材料的方法。我想为此目的,我可以THREE.ShaderMaterial使用来自THREE.ShaderLib['lambert']. 所以这就是我的做法:

class LandscapeMaterial extends THREE.ShaderMaterial{
    constructor(config){
        var getShader = function( shaderStr ) {
            return shaderStr.replace( /#include\s+\<(\S+)\>/gi, function( match, p1 ){
                var chunk = THREE.ShaderChunk[ p1 ];
                return chunk ? chunk : "";
            });
        };

        var lambertShader = THREE.ShaderLib['lambert'];

        var uniforms = lambertShader.uniforms;

        var params = {
            side: THREE.DoubleSide,
            uniforms: uniforms,
            vertexShader: getShader(lambertShader.vertexShader),
            fragmentShader: getShader(lambertShader.fragmentShader),
        };
        super(params);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,此代码会引发错误:WebGL: INVALID_VALUE: uniform3fv: no array. 我如何解决它?

three.js

5
推荐指数
0
解决办法
1530
查看次数

包含指令和形式

我正在尝试创建一些用于包装布局的指令,以便可以从该布局中抽象出来(据我所知,这是指令的主要目标之一)。

所以我想要的是这样的:

<dialog>
  <dialog-title></dialog-title>
  <dialog-body></dialog-body>
  <dialog-footer></dialog-footer>
</dialog>
Run Code Online (Sandbox Code Playgroud)

我为此创建了3个简单的伪指令

app.directive('dialog', ()=>{
  return {
    template: '<div class="dialog" ng-transclude></div>',
    replace: true,
    transclude: true,
    restrict: 'E',
  }
})
Run Code Online (Sandbox Code Playgroud)

然后,我想确保在一个指令(对话框主体)中定义的模型在另一指令(对话框脚注)中可见,因为我需要该对话框上的某种形式和页脚中的某些导航按钮,而这些内容可能会被禁用,而不取决于两者之一该表格有效与否。

  <body ng-controller="MainCtrl">
    <p>age: {{age}}</p>
    <dialog>
      <p>age: {{age}}</p>
      <dialog-body>
        <form name="dialogForm">
          <p>age: {{age}}</p>
          <input ng-model="age" minlength="3"/>
        </form>
      </dialog-body>
      <dialog-footer>
        <p>age: {{age}}</p>
      </dialog-footer>
    </dialog>
  </body>
Run Code Online (Sandbox Code Playgroud)

ng-modelin dialog-body将在对话框主体的范围内创建age变量,但直到我将其放入object并在中声明时,它才会出现在其他指令中MainCtrl。它是这样工作的:

  <body ng-controller="MainCtrl">
    <p>age: {{user.age}}</p>
    <dialog>
      <p>age: {{user.age}}</p>
      <dialog-body>
        <form name="dialogForm">
          <p>age: {{user.age}}</p>
          <input ng-model="user.age" minlength="3"/>
        </form>
      </dialog-body>
      <dialog-footer>
        <p>age: {{user.age}}</p>
      </dialog-footer>
    </dialog>
  </body>
Run Code Online (Sandbox Code Playgroud)

和控制器:

app.controller('MainCtrl', function($scope) …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-directive angularjs-ng-transclude

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

使视频流在getUserMedia中可选

在我的应用程序中,如果用户可以生成音频流,则可以拨打电话.所以,我需要访问麦克风(音频流).没有它,应用程序应该抛出错误.视频是可选的.所以,我打电话navigator.getUserMediaconstraints这样说:

{ audio: true, video: false }

当麦克风不存在时,它会抛出错误,就像我需要的那样.但是这样的副作用是,如果用户也可以访问摄像机,则视频不会出现在流中.

但是,如果我同时设置audiovideotrue我当用户有一个麦克风,但没有访问摄像头(根据我的应用程序逻辑这是确定)将在案件的错误

如何才能使视频流可选getUserMedia

webrtc getusermedia

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

kohana orm3中的多插入

在我的应用程序中,我有一个执行大约1000次的循环,在其中我正在创建对象并保存它.这是我使用数据填充数据库的应用程序的一部分.通常这看起来像这样:

foreach(...){
    ...
    try{
        $object = new Model_Whatever;
        $object->whatever=$whatever;
        $object->save();}
    catch(Exception $e){
    ...}
}
                    }
Run Code Online (Sandbox Code Playgroud)

这会产生1000个INSERT查询.是否有可能以某种方式使kohana生产多个插入物.将其拆分为10个插入,每个插入100个数据集.是否可能,如果可以,这样做的方式是什么?

kohana kohana-3 kohana-orm

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

如何在ng-options中使用自然排序?

我有一个像这样的对象:

Object {0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 11, 6: 13, 7: 15, 8: 17, 9: 19, 10: 22, 11: 24, 12: 26, 13: 28, 14: 30, 15: 33, 16: 35, 17: 37, 18: 39, 19: 41, 20: 44, 21: 46, 22: 48, 23: 50, 24: 52, 25: 55, 26: 57, 27: 59, 28: 61, 29: 63, 30: 66, 31: 68, 32: 70, 33: 72, 34: 74, 35: 77, 36: 79, 37: 81, 38: 83, …
Run Code Online (Sandbox Code Playgroud)

angularjs

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

GIT:仅将远程存储库中的一些文件添加为子模块

我需要向我的项目添加一些 JS 库,并且我还希望能够从它的 repo 更新该库(这就是我将它添加为子模块的原因)。但是我只需要将该存储库中的 1 个文件放置在我的 JS 目录中,而库存储库包含测试、coffeescript 源等,我的存储库中不需要这些文件。所以问题是 - 如何不将整个 repo 添加为子模块,而是从中添加单个文件/目录?

我想这在Git Sparse checkouts 的帮助下是可能的,但不确定我是否在正确的方式上......

git

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

Kohana 3 OpenID

我需要在我的Kohana 3应用程序中实现openID身份验证.我正在搜索并找到这个http://code.google.com/p/kohanamodules/wiki/Openid#whb,但这是针对2.x版本的kohana,不能在3.x中使用.有没有实现?

openid kohana-3

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

threejs射线广播不起作用

我在尝试编写单元测试以检查冲突检测时遇到问题。我尽可能地简化代码-我在(0,0,0)中有一个平面,并且从该平面上方(从(0,100,0))到底部(0,-1,0)进行光线投射假设找到与该平面的交点,但没有运气。

console.clear();
var intersections,
    from = new THREE.Vector3(0, 100, 0);
    direction = new THREE.Vector3(0, -1, 0),
    raycaster = new THREE.Raycaster();

var geometry = new THREE.PlaneGeometry(10, 10, 1, 1);
var ground = new THREE.Mesh(geometry);
ground.position.set(0, 0, 0);
ground.rotation.x = THREE.Math.degToRad(-90);

raycaster.set(from, direction);
intersections = raycaster.intersectObjects([ground]);
console.log(intersections);
Run Code Online (Sandbox Code Playgroud)

怎么了 为什么这个简单的代码不显示任何交集?(r73)。

jsfiddle示例

three.js

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