我有一个包含分页数据的表,这是我为每个页面选择数据的方式:
@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(*)'查询但没有那么无用的'限制/偏移'?
我正在尝试渲染选择框,但它没有按预期工作 - 选项值不正确.我检查了手册,根据它的数组语法(在我的情况下,对象数组)是
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上.任何帮助赞赏.
我正在编写一个着色器来从高度图渲染地形,一切都很顺利,除了在我有了着色器之后我失去了灯光和阴影。这就是地狱痛苦开始的时候。我应该用来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) 如何传递返回某种类型对象的函数数组.换句话说 - 构造函数数组?
我想做的是这样的:
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) 我编写了一些自定义着色器,但不想丢失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. 我如何解决它?
我正在尝试创建一些用于包装布局的指令,以便可以从该布局中抽象出来(据我所知,这是指令的主要目标之一)。
所以我想要的是这样的:
<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) 在我的应用程序中,如果用户可以生成音频流,则可以拨打电话.所以,我需要访问麦克风(音频流).没有它,应用程序应该抛出错误.视频是可选的.所以,我打电话navigator.getUserMedia给 constraints这样说:
{ audio: true, video: false }
当麦克风不存在时,它会抛出错误,就像我需要的那样.但是这样的副作用是,如果用户也可以访问摄像机,则视频不会出现在流中.
但是,如果我同时设置audio并video以true我当用户有一个麦克风,但没有访问摄像头(根据我的应用程序逻辑这是确定)将在案件的错误
如何才能使视频流可选getUserMedia?
在我的应用程序中,我有一个执行大约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个数据集.是否可能,如果可以,这样做的方式是什么?
我有一个像这样的对象:
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) 我需要向我的项目添加一些 JS 库,并且我还希望能够从它的 repo 更新该库(这就是我将它添加为子模块的原因)。但是我只需要将该存储库中的 1 个文件放置在我的 JS 目录中,而库存储库包含测试、coffeescript 源等,我的存储库中不需要这些文件。所以问题是 - 如何不将整个 repo 添加为子模块,而是从中添加单个文件/目录?
我想这在Git Sparse checkouts 的帮助下是可能的,但不确定我是否在正确的方式上......
我需要在我的Kohana 3应用程序中实现openID身份验证.我正在搜索并找到这个http://code.google.com/p/kohanamodules/wiki/Openid#whb,但这是针对2.x版本的kohana,不能在3.x中使用.有没有实现?
我在尝试编写单元测试以检查冲突检测时遇到问题。我尽可能地简化代码-我在(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)。
angularjs ×3
three.js ×3
kohana-3 ×2
getusermedia ×1
git ×1
kohana ×1
kohana-orm ×1
openid ×1
ruby ×1
typescript ×1
webrtc ×1