我有一个heckuva时间过渡到Dojo和新的AMD结构,我真的希望有人可以对整个概念有所了解.过去几周我一直在Google上生活,试图找到关于不使用的信息,但是使用它的结构和设计模式趋势.
我觉得奇怪的是,对于一个相对复杂的javascript应用程序,例如需要创建和设置Dijits的主页面,创建的DOM元素等,我需要,因此使用,不同模块的TON否则在AMD系统之前的dojo命名空间中可用(或者,至少不分配给23个不同的vars).
例:
require(['dijit/form/ValidationTextBox', 'dijit/form/SimpleTextarea', 'dijit/form/CheckBox', 'dijit/Dialog', 'dijit/form/Form'])
require(['dojo/ready', 'dojo/parser', 'dojo/dom-style', 'dijit/registry', 'dojo/dom', 'dojo/_base/connect', 'dojo/dom-construct'],
function(ready, parser, style, registry, dom, event, construct){
//...etc
}
Run Code Online (Sandbox Code Playgroud)
这只是我正在处理的其中一个页面的一些模块.当然,有一种更好的,非破坏性的未来发布方式来访问这些方法,等等.我的意思是,我真的必须导入一个全新的模块才能使用byId()吗?而另一个连接事件?最重要的是,通过必须在函数参数列表中分配变量名来创建的所有混乱只是看起来像这样的后退.
我想也许你require()只在需要的时候才能使用模块,比如query模块,但是如果我不止一次需要它,那么分配给它的变量很可能超出范围,我需要将它放入domReady!或ready调用. reaalllly .... ??!
这就是为什么我只能假设我对道场缺乏了解.
我真的已经查看并搜索并购买了书籍(虽然是AMD之前的一本),但这个图书馆真的让我为我的钱买单.我很欣赏任何人都能看到的光.
编辑示例
require(['dijit/form/ValidationTextBox'])
require(['dojo/ready', 'dojo/parser', 'dojo/dom-style', 'dijit/registry', 'dojo/dom', 'dojo/_base/connect', 'dojo/dom-construct'], function(ready, parser, style, registry, dom, event, construct){
/* perform some tasks */
var _name = new dijit.form.ValidationTextBox({
propercase : true,
tooltipPosition : ['above', 'after']
}, 'name')
/*
Let's say I …Run Code Online (Sandbox Code Playgroud) 使用Babel转换为ES6时出现奇怪的错误,ng-annotate不喜欢解构.我将我的源码复制到在线babel编译器中,它运行正常.ng-annotate在我的gulp管道链中注释掉了错误.删除/* @ngAnnotate */文件中的注释并手动注入也不会改变任何内容.
Gulp部分:
return gulp.src(config.scripts.app)
.pipe(changed(config.dist + '/scripts'))
.pipe(plumber())
.pipe(annotate())
// Filter out and transpile only .es6.js files
.pipe(es6)
.pipe(babel({
presets: ['es2015'],
plugins: ['extensible-destructuring'],
comments: false
}))
.pipe(es6.restore)
.pipe(concat('scripts.js'))
.pipe(gulp.dest(config.dist + '/scripts'))
Run Code Online (Sandbox Code Playgroud)
有问题的来源:
var [min, max] = values.map(val => +val);
// let/var doesn't make a difference.
ngModelCtrl.$modelValue = [min, max];
Run Code Online (Sandbox Code Playgroud)
错误来自依赖ng-annotate:
Error: StringMap expected string key
at stringmap.set (/Users/macbookair/Places/app/places/frontend/node_modules/gulp-ng-annotate/node_modules/ng-annotate/node_modules/stringmap/stringmap.js:101:19)
at Scope.add (/Users/macbookair/Places/app/places/frontend/node_modules/gulp-ng-annotate/node_modules/ng-annotate/build/es5/scope.js:102:17)
at /Users/macbookair/Places/app/places/frontend/node_modules/gulp-ng-annotate/node_modules/ng-annotate/build/es5/scopetools.js:38:25
at Array.forEach (native)
.... more
Run Code Online (Sandbox Code Playgroud)
stringmap.js 有问题的功能: …
我真的不知道从哪里开始.
我已经浏览了每个教程,文章和博客文章,试图获得dojo为其工作的一件事,并且我从来没有遇到过这样的问题,至少只是一点点.我发现了文档上的火焰战争以及有工作脚本的人,但没有发布或概述.在SO,我发现这是一个非常普遍的问题,但没有一半时间解决.
免责声明:忘记1.6.我从来没用过1.6.因此,我在网上找到的资源有一半是无效的,我的书也是如此.开始了.
有很多关于使用这种格式的帖子有什么区别:
dependencies = {
stripConsole: "all",
action: "release",
optimize: "shrinksafe",
// Omitted options...
layers: [{
name: "dojo.js",
customBase : true,
dependencies: [
"dojox.gauges.AnalogNeedleIndicator",
"myApp.smartmix"]
}
],
prefixes: [
[ "dijit", "../dijit" ],
[ "dojox", "../dojox" ],
[ "myApp", "../../../myApp" ]
]
};
Run Code Online (Sandbox Code Playgroud)
...对比这种格式:
var profile = {
basePath: './',
stripConsole: 'all',
selectorEngine: 'lite',
layers: {
'dojo/dojo': {
include: ['dojo/dojo', 'dojo/domReady', 'dojo/_base/declare'],
boot: true,
customBase: true
},
'dgrid/dgrid': {
include: ["dgrid/List", "dgrid/OnDemandGrid", "dgrid/Selection", "dgrid/Keyboard", "dgrid/test/data/perf"]
}
} …Run Code Online (Sandbox Code Playgroud) 有没有办法Document.visibilityState在电子应用程序上伪造?我需要一个不能正确处理失去焦点的网站(它只查看Document.visibilityState并且应该查看模糊)。
最小化窗口有效,但不方便。
编辑:我的用例是:我在一个电子应用程序中包装一个网站。该网站正在查看Document.visibilityState用户是否处于活动状态。问题是如果用户切换到另一个窗口,visibilityState 仍然是“可见的”。该网站还应该查看模糊/焦点事件,但事实并非如此(这不是我的网站)。我想自己处理模糊事件(我可以),并伪造它,Document.visibilityState以便知道它不可见或不聚焦。
前段时间,我在使用Dojo和Dojo主题时研究了"无格式内容的闪现"的解决方案.有人建议通过创建构建来组合所有内容,并且它将减少加载/解析时间并消除使用预加载器覆盖等的需要.
然而,似乎Dojo严重缺乏简单,"真实世界"的用法示例和教程,以实现其许多功能,尤其如此.很多资源都告诉您如何设置构建,而不是如何实现它.
假设我在"pageinit.js"中有这个:
require([
'dojo/parser',
'dojo/dom',
'dojo/dom-class',
//etc...
'dijit/form/ValidationTextBox',
'dijit/form/CheckBox',
// etc...
// Dom Ready call
'dojo/domReady!']
function(
Parser,
Dom,
Class,
// etc...){
// do stuff with parser, dijits, so on.
}
)
Run Code Online (Sandbox Code Playgroud)
为简洁起见,删除了一些require调用,但是有一些dom需求,style类,一些dijits等等.当这个页面加载时,有一些没有样式的内容,然后就可以了.
使用Dojo Web Builder,我选择了我正在使用的模块并运行它.它下载了一个包含大量文件的zip,包括一个新的dojo.js和custom_layer.js.
所以现在我的问题是,如何使用这些新的组合和缩小文件来代替我的"非构建"版本?我是require什么?或者我呢?
如此迷茫...
我开始尝试围绕requirejs和新的Dojo AMD结构,但我有一些早期测试的问题:
CG/signup.js:
define(['dojo/_base/fx', 'dojo/dom'], function(fx, dom){
return function(){
this.hidePreloader = function(id){
var preloader = dom.byId(id);
fx.fadeOut({node : preloader}).play()
}
}
})
Run Code Online (Sandbox Code Playgroud)
这很好用.在master cg.js文件中:
require(['dojo/_base/kernel', 'dojo/_base/loader'])
dojo.registerModulePath('cg', '../cg')
require(['cg/signup', 'dojo/domReady!'], function(Signup){
var sp = new Signup();
sp.hidePreloader('preloader')
})
Run Code Online (Sandbox Code Playgroud)
巴姆.完成.但是,在使用Simplified CommonJS Wrapper结构时:
define(function(require){
var fx = require('dojo/_base/fx'),
dom = require('dojo/dom');
return function(){
this.hidePreloader = function(id){
var preloader = dom.byId(id);
fx.fadeOut({node : preloader}).play()
}
}
})
Run Code Online (Sandbox Code Playgroud)
我收到一个undefinedModule错误.它似乎来自这dojo/_base/fx条线,但我不知道为什么.
UPDATE
为了澄清.
index.html脚本
<script type="text/javascript" src="js/dojo/dojo.js.uncompressed.js" data-dojo-config="isDebug:true,async:true"></script>
<script type="text/javascript" src="js/cg.js"></script>
Run Code Online (Sandbox Code Playgroud)
cg.js
require(['dojo/_base/kernel', 'dojo/_base/loader']) …Run Code Online (Sandbox Code Playgroud) 几天来我一直在努力(和搜索)寻找解决方案,虽然以下方法有效,但我不禁觉得有一种更 rxjs-y 的方法可以做到这一点。
我有一组 URL 需要从外部源下载,该源有速率限制,每分钟不超过 100 个调用。
const sources = ['a.jpg', 'b.jpg', 'c.jpg'];
timer(0, 1000).pipe(
switchMap(index => of(sources[index])),
takeWhile(_ => _ !== undefined),
switchMap(url => {
return from(download(url))
})
).subscribe(
next => console.log(next),
err => console.error(err),
() => console.info('Done')
)
// Pseudo
function download(url) {
return new Promise((resolve, reject) => {
resolve('Downloaded ' + url)
})
}
Run Code Online (Sandbox Code Playgroud)
看起来有点迂回和老套。
迭代数组以避免每秒过多请求被锁定的最佳方法是什么?
我正在执行 get 请求以检索用户角色
private myOrders;
constructor(private userData: UserDataService) {
this.userData.getUser().subscribe((user: any) => {
//and then I'm doing a conditional get
if (user.role == "Admin") {
this.userData.getAdminOrders().subscribe((adminOrders: any) => {
this.myOrders = adminOrders
});
} else {
this.myOrders = user.orders
}
});
Run Code Online (Sandbox Code Playgroud)
我的应用程序仅正确显示 user.orders (普通客户的订单),但是当我使用管理员帐户时,它只显示第一页加载,但随后它们就消失了。
我如何管理这些嵌套订阅?(它们是我的 userDataService 上的 http.get)
我想在一个屏幕上同时使用react-native-gl-model-view 中的2 个“3d 对象模型” 。当我使用单个 3d 对象时,它工作正常,但一旦我使用两个或两个以上,每个 3d 对象模型就会开始闪烁,几秒钟后应用程序崩溃。
这是它如何处理多个 3d 对象
这是代码:
import React, {Component} from 'react';
import {StyleSheet, View, Animated} from 'react-native';
import ModelView from 'react-native-gl-model-view';
const AnimatedModelView = Animated.createAnimatedComponent(ModelView);
export default class Multiple extends Component {
constructor() {
super();
this.state = {
rotateZ: new Animated.Value(0),
};
}
componentDidMount() {
this.animate(0);
}
animate(iteration) {
Animated.timing(this.state.rotateZ, {
toValue: ++iteration * 360,
useNativeDriver: true,
duration: 5000,
}).start(this.animate.bind(this, iteration++));
}
renderModel() {
return (
<AnimatedModelView
model={{
uri: 'demon.obj',
}} …Run Code Online (Sandbox Code Playgroud) 我正在做一些Javascript研发,虽然我读过Javascript:The Definitive Guide和Javascript面向对象编程,但我仍然遇到一些小问题,让我的基础出自基于OOP的词汇,并进入词汇,基于对象的OOP.
我喜欢模块.命名空间,子类和接口.w00t.这就是我正在玩的东西:
var Classes = {
_proto : {
whatAreYou : function(){
return this.name;
}
},
Globe : function(){
this.name = "Globe"
},
Umbrella : new function(){
this.name = "Umbrella"
}(),
Igloo : function(){
function Igloo(madeOf){
this.name = "Igloo"
_material = madeOf;
}
// Igloo specific
Igloo.prototype = {
getMaterial : function(){
return _material;
}
}
// the rest
for(var p in Classes._proto){
Igloo.prototype[p] = Classes._proto[p]
}
return new Igloo(arguments[0]);
},
House : function(){ …Run Code Online (Sandbox Code Playgroud) javascript ×7
dojo ×4
js-amd ×2
rxjs ×2
3d-model ×1
android ×1
angular ×1
angularjs ×1
babeljs ×1
build ×1
closures ×1
compilation ×1
dojo-build ×1
electron ×1
namespaces ×1
ng-annotate ×1
observable ×1
react-native ×1
reactjs ×1