我有几个像这样的javascript对象:
var object = {
name: "object name",
description: "object description",
properties: [
{ name: "first", value: "1" },
{ name: "second", value: "2" },
{ name: "third", value: "3" }
]
};
Run Code Online (Sandbox Code Playgroud)
现在我想将这些对象更改为更智能的对象(添加一些方法等).
起初我做了一个像这样的构造函数:
SmartObject = function( object ){
this.name = object.name;
this.description = object.description;
this.properties = object.properties;
};
SmartObject.prototype.getName = function(){
return this.name;
};
SmartObject.prototype.getDescription = function(){
return this.description;
};
SmartObject.prototype.getProperies = function(){
return this.properties;
};
Run Code Online (Sandbox Code Playgroud)
然后我使用这个构造函数将我的对象更改为这样的SmartObject
实例:
var smartObject = new SmartObject( object );
Run Code Online (Sandbox Code Playgroud)
这似乎是正确的面向对象的javascript代码,但这感觉非常复杂,因为我实际想要做的是添加一些方法,现在object …
这是我想要实现的(一个可修改的多边形,其中红色圆圈是顶点),我想动态构建多边形.
在启动几何体时
var geometry = new THREE.Geometry();
geometry.vertices.push(point);
geometry.vertices.push(point);
var line = new THREE.Line(geometry, new THREE.LineBasicMaterial({}));
Run Code Online (Sandbox Code Playgroud)
它运行良好,直到第二次单击,它在1和2之间构建一条直线,但是当它被推送到数组时不会添加第三条线.WebGL似乎需要缓冲点.
当我预定义像这样的顶点我可以画两条线(第三次点击)
var geometry = new THREE.Geometry();
for (var i = 0; i < 4; i++) {
geometry.vertices.push(point);
}
var line = new THREE.Line(geometry, new THREE.LineBasicMaterial({}));
Run Code Online (Sandbox Code Playgroud)
但这不是一个好的解决方案,因为我不知道用户想要添加多少个顶点,因为我需要多次循环它,所以分配它是没有意义的.
它有什么办法吗?
我尝试将表单类型嵌入到另一种表单类型中:
$builder->add('geolocation', new GeolocationType());
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将请求绑定到表单时
if($request->getMethod() == 'POST') {
$form->bindRequest($request);
}
Run Code Online (Sandbox Code Playgroud)
我收到了错误
可捕获的致命错误:传递给Company\StoreBundle\Document\Place :: setGeolocation()的参数1必须是Company\StoreBundle\Document\Geolocation的实例,给定的数组,在
/var/www/Company/vendor/symfony/src中调用第392行/Symfony/Component/Form/Util/PropertyPath.php,在/var/www/Company/src/Company/StoreBundle/Document/Place.php第43行中定义
该data_class设置无论是对PlaceType和GeolocationType
这是我的代码:
Place.php
namespace Company\StoreBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
* @MongoDB\Document(collection="places")
*/
class Place
{
/**
* @MongoDB\Id
*/
private $id;
/**
* @MongoDB\String
*/
private $title;
/**
* @MongoDB\EmbedOne(targetDocument="Geolocation")
*/
private $geolocation;
/**
* Get id
*
* @return id $id
*/
public function getId()
{
return $this->id;
}
/**
* Set geolocation
*
* @param Company\StoreBundle\Document\Geolocation $geolocation
*/
public …
Run Code Online (Sandbox Code Playgroud) 如何通过Zend框架2 ValidatorChain将空值传递给我的自定义验证器?
在ZF1上有可能 allowEmpty(false)
在具有空元素值的ZF2上:
如果allowEmpty = false
,NotEmptyValidator被添加到ValidatorChain的顶部breakOnFailure = true
,@see Zend/InputFilter/Input#injectNotEmptyValidator
.
如果allowEmpty = true
,Element被视为有效,@see Zend/InputFilter/BaseInputFilter#isValid
if ($input->allowEmpty()) {
$this->validInputs[$name] = $input;
continue;
}
Run Code Online (Sandbox Code Playgroud)我想在我的Chrome浏览器中内联打开"application/hal + json"响应.问题是Chrome浏览器无法识别HAL响应并下载它.之前我总是使用Chrome的JSON视图扩展来检查我的JSON响应.但是,自从交换到HAL后,它会立即下载我的回复,因此我无法再查看它了.
它似乎很简单,但我无法找到如何将一个Array
填充整数转换为一个ArrayBuffer
并重新转换为一个整数Array
.有很多的例子,其中字符串转换为ArrayBuffer
例如像在这里.
使用这些例子我创建了这个:
/**
* Convert string to array buffer.
*
* @param {Array.<int>} array
* @returns {ArrayBuffer}
*/
self.arrayToArrayBuffer = function( array ) {
var length = array.length;
var buffer = new ArrayBuffer( length * 2 );
var view = new Uint16Array(buffer);
for ( var i = 0; i < length; i++) {
view[i] = array[i];
}
return buffer;
}
Run Code Online (Sandbox Code Playgroud)
然后阵列也需要再次转换回来.为此,我使用:
var array = new Uint16Array(arrayBuffer);
Run Code Online (Sandbox Code Playgroud)
这个解决方案似乎有效,但有没有更简单的方法呢?
它也适用于如下数组:
var …
Run Code Online (Sandbox Code Playgroud) 据我所知,var point = object.geometry.vertices[i];
将在相对位置回归x
,y
以及z
物体的几何内点.
如果物体被移动,旋转或缩放,如何获得绝对位置?
我想在浏览器标签之间共享我的身份验证令牌,建议使用HTML5localStorage
.但是,当浏览器关闭时,我不希望任何与身份验证相关的内容留在我的存储中,建议使用HTML5sessionStorage
.
这意味着您无法在选项卡之间共享,为此您应该使用localStorage
因此,建议不要将任何敏感信息存储在本地存储中
如何在选项卡之间组合我的身份验证令牌,并确保在浏览器关闭时没有任何内容留在存储中?
其他网站如何解决这个看似简单的问题.
authentication html5 authorization session-storage local-storage
一直在尝试Sails.js,我正在编写一个从第三方API导入数据并保存到MySQL表中的应用程序.基本上我正在尝试将数据同步到我的应用程序以进行进一步分析,更新我的记录或根据需要创建新记录.
我查看了Sails的API,我看到了查找,创建和更新记录的方法,但没有根据情况插入/更新记录的内置方法.我是否忽视了某些事情,或者我是否需要自己实施?
如果我必须自己实现,有没有人知道插入/更新的良好设计模式?
这就是我认为它可能看起来像......
_.each(importedRecords, function(record){
MyModel.find({id: record.id}).exec(function findCB(err, found){
if(found.length){
MyModel.update(record.id, task).exec(function(err, updated){
if(err) { //returns if an error has occured, ie id doesn't exist.
console.log(err);
} else {
console.log('Updated MyModel record '+updated[0].name);
}
});
}else{
MyModel.create(record).exec(function(err, created){
if(err) { //returns if an error has occured, ie invoice_id doesn't exist.
console.log(err);
} else {
console.log('Created client record '+created.name);
}
});
}
});
});
Run Code Online (Sandbox Code Playgroud)
我是朝着正确的方向前进,还是有更优雅的解决方案?
此外,我在这个应用程序中处理了很多不同的模型,这意味着在我的每个模型中重新创建这个代码块.有没有办法可以扩展基础Model对象,为所有模型添加此功能.
谢谢,约翰
据我所知,使用缓冲区几何可以提高性能并减少内存使用量,因为它可以降低将所有这些数据传递给GPU的成本.
正如我从@WestLangley所了解的那样:
THREE.BufferGeometry
正在逐步取代,THREE.Geometry
因为它在计算上更有效率.
我目前正在使用three.js - r72.
当我画我的几何形状使网格,并将它们添加到我看到有我的geomtries内两个属性的场景__directGeometry
和_bufferGeometry
.
在这里THREE.BoxGeometry
:
在这里THREE.Geometry
:
在这里THREE.ShapeGeometry
:
我的问题:
THREE.DirectGeometry
它是什么,它做什么?(我似乎无法找到任何关于此的文件)THREE.BufferGeometry
存储_bufferGeometry
已经自动使用了吗?如果没有,我可以简单地使用它而不是几何来提高性能吗?THREE.BufferGeometry
has toGeometry
和THREE.Geometry
has toBufferGeometry
.如果我使用这种方法将所有常规几何转换为缓冲几何,与THREE.BufferGeometry
从一开始绘制它们相比,它会给我相同的性能提升吗?THREE.BufferGeometry
?THREE.Geometry
赞成THREE.BufferGeometry
?注意:我找不到有关何时以及如何使用缓冲区几何形状或何时更换的详细信息THREE.Geometry
.但如果某人有良好的来源或参考,请发表评论.
javascript ×6
three.js ×3
php ×2
webgl ×2
arraybuffer ×1
arrays ×1
doctrine-orm ×1
download ×1
extending ×1
geometry ×1
hal-json ×1
html5 ×1
inline ×1
input-filter ×1
methods ×1
mongodb ×1
object ×1
sails.js ×1
symfony ×1
validation ×1