我有Backbone Marionette和ItemView渲染的问题.我需要将Composite视图中的值传递给每个Item View.该值在项视图的options数组中正确包含,但是,我无法从templateHelpers方法访问它.
所以我尝试将其设置为我的View的值,但是当我渲染数组时,它返回一个"未定义"值.
复合视图
var TableView = Backbone.Marionette.CompositeView.extend({
....
itemViewOptions: {
foo: "bar",
},
Run Code Online (Sandbox Code Playgroud)
物品视图
var RowView = Backbone.Marionette.ItemView.extend({
template: RowTemplate,
tagName: "tr",
foo: "",
initialize: function(){
this.foo = this.options.foo;
},
templateHelpers: {
foo: function(){
return this.foo;
}
},
Run Code Online (Sandbox Code Playgroud)
我做错了什么?如何访问该值并将其提取到模板?谢谢.
我只是遇到了使用Knockout和Knockout-sortable插件制作的To-do-like sortable列表的另一个问题.
我需要在当前时间放置的元素下放置一个红色分隔符,如果在该分隔符之前删除了一个元素,则取消排序.
我尝试使用"可见"绑定并且它以某种方式工作,但是visibile绑定只是隐藏了DOM元素,它搞乱了可排序的arrayIndex,为它添加了不必要的元素.
<div class="delimiter" data-bind="visible: time() == $root.limit()"></div>
Run Code Online (Sandbox Code Playgroud)
"if"绑定会更好,因为它只在必要时插入DOM元素,但我用于visible的表达式总是被评估为true,我无法弄清楚为什么......
<div class="delimiter" data-bind="if: time() == $root.limit()"></div>
Run Code Online (Sandbox Code Playgroud)
这是小提琴:http://jsfiddle.net/ingro/VaqqF/
任何帮助表示赞赏,谢谢!
我正在尝试在具有许多子域的主机上使用Laravel.只有一个子菜单会运行Laravel的应用程序,但我想通过PHP本机会话分享一些东西(比如当前用户).
我编辑了Laravel的会话配置以使用子域,更改域值:
'cookie' => 'mydomain_session',
'domain' => '.mydomain.com',
Run Code Online (Sandbox Code Playgroud)
在Laravel未运行的另一个子域中,我正在尝试以这种方式访问会话:
session_name("mydomain_session");
session_set_cookie_params(0,'/','.mydomain.com',false,true);
session_start();
Run Code Online (Sandbox Code Playgroud)
但它不起作用,如果我尝试回显$ _SESSION变量是空的.
最奇怪的是,如果我尝试回显session_id(),它们在两个子域中都是相同的.
此外,如果我在第三个子域中设置相同的脚本,它与其他非laravel子域共享会话没有问题.
那么我做错了什么?我错过了一些东西,或者Laravel没有以普通方式管理本机PHP会话?
任何帮助表示赞赏!
我正在尝试使用Backbone和Yii Framework完成我的第一个RESTful应用程序.我对GET方法没有任何问题,但是我现在卡在POST方法中,以创建一个新元素.
我在Backbone中有一个评论模型:
var commentModel = Backbone.Model.extend({
urlRoot: "index.php/api/comments",
idAttribute: 'id',
defaults: {
content: "Empty comment",
status: 1
}
});
Run Code Online (Sandbox Code Playgroud)
在我看来,我添加了一个函数来创建一个新的Comment传递相对形式的值:
on_submit: function(e) {
var new_comment = new Comment({author_id: this.$('#author_text').val(), content: this.$('#content_text').val(), post_id: this.$("#post_text").val(), status: this.$("#status_text").val()});
new_comment.save();
},
Run Code Online (Sandbox Code Playgroud)
用Firebug查看请求似乎没问题,在POST选项卡中我可以看到所有值:
JSON
author_id "7"
content "Epic fail"
post_id "7"
status "2"
Source
{"content":"Epic fail","status":"2","author_id":"7","post_id":"7"}
Run Code Online (Sandbox Code Playgroud)
但是在我的php Api中,$ _POST var是空的!
foreach($_POST as $var=>$value) {
if($model->hasAttribute($var))
$model->$var = $value;
else
$this->_sendResponse(500);
}
Run Code Online (Sandbox Code Playgroud)
有人有想法吗?阅读Backbone.Sync的文档我明白它应该使用POST来创建请求.
我找到了一个解决方法来获取以下值:
file_get_contents('php://input')
Run Code Online (Sandbox Code Playgroud)
但是对我来说身份不合适......
谢谢.
在我的应用程序中,我有一个视图显示为一个表,其中包含从服务器获取的集合.我希望用户能够过滤此集合,在文本框中编写搜索字符串.
问题是每次击键都会触发keyup事件,我想避免这种情况,以免使用无用的请求使服务器过载.所以我想使用下划线的油门功能,但我不能以一种有效的方式实现它.
events: {
'keyup #filter' : 'filter_collection'
}
filter_collection: function(e) {
var el, throttled, value;
el = e.currentTarget;
value = $(el).val();
this.collection.server_api.filter = value;
throttled = _.throttle(_.bind(this.update_collection, this), 5000);
throttled();
}
update_collection: function() {
var promise, self;
self = this;
promise = this.collection.fetch();
$.when(promise).then(function() {
self.collection.pager();
});
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,每次击键都会调用update_collection函数,就像之前没有那样throttle.我也试过了,debounce但所有的请求都会在等待时间之后发出.我错过了什么?
任何帮助表示赞赏,谢谢!
我正在使用Laravel 4开发一个应用程序,我有一个问题,我想在完全提交之前被问到.
我已经创建了一些自定义类和外观,这些类和外观已成功添加到laravel的配置文件中.
例如:
namespace Helpers;
class Ftp {
public function connect($data)
{
// Do something
}
}
Run Code Online (Sandbox Code Playgroud)
我实际上正在使用php的use语句来访问外墙,就像我在Laravel中常见的那样:
namespace Helpers;
use Illuminate\Support\Facades\File;
class Ftp {
public function Connect($data)
{
$file = File::get('text.txt');
...
}
}
Run Code Online (Sandbox Code Playgroud)
现在在自定义类中使用laravel外观的正确方法是什么?我觉得这不是一个好的选择,特别是考虑可测试性.任何建议表示赞赏!
我最近出现了这个奇怪的问题.我目前正在Windows环境中进行开发,而在Linux服务器上进行部署时,我知道这并不理想,但在此阶段我无法做很多事情.
我所做的只是从数据库获取数据,然后返回结果数组的JSON响应,但结果不同导致我的前端应用程序出现问题.
我在Windows上得到这个:
{
"id":40,
"name":"test"
}
Run Code Online (Sandbox Code Playgroud)
这在Linux上:
{
"id":"40",
"name":"test"
}
Run Code Online (Sandbox Code Playgroud)
我实际上使用的是Laravel框架,所以语法就是这样:
$user = User::find($id);
return Response::json($user->toArray());
Run Code Online (Sandbox Code Playgroud)
幕后背后是这样做的:
$this->data = json_encode($data);
Run Code Online (Sandbox Code Playgroud)
所以不幸的是我没有钩子在哪里设置JSON_NUMERIC_CHECK选项.
在重构我的代码之前,有没有办法强制JSON_NUMERIC_CHECK所有json_encode调用?我正在使用相同的数据库来获取数据,所以我猜它可能是一个与平台相关的问题?
编辑:
进一步的调查使我认为有罪可能是数据库驱动程序.如果我在Windows上转储数据我得到这个:
array
'id' => int 40
'name' => string 'test' (length=4)
Run Code Online (Sandbox Code Playgroud)
在Linux上它是:
array
'id' => string '40' (length=2)
'name' => string 'test' (length=4)
Run Code Online (Sandbox Code Playgroud) 这些天我和Electron一起玩,为Windows构建一个小型原生应用程序,我正在使用Grunt Electron Installer为我的应用程序创建一个安装程序.
安装程序已成功创建,但我不知道如何在我的应用程序中处理Squirrel的事件,如我在我的应用程序的入口点添加此文档中所述:
var handleStartupEvent = function() {
if (process.platform !== 'win32') {
return false;
}
var squirrelCommand = process.argv[1];
switch (squirrelCommand) {
case '--squirrel-install':
case '--squirrel-updated':
// Optionally do things such as:
//
// - Install desktop and start menu shortcuts
// - Add your .exe to the PATH
// - Write to the registry for things like file associations and
// explorer context menus
// Always quit when done
app.quit();
return true;
case …Run Code Online (Sandbox Code Playgroud) 我正在使用ReactJS为一个简单的可过滤项目列表提供支持,它可以很好地满足我的需求.
问题是我需要在服务器上呈现标记以获取SEO原因,但是当我调用React.renderComponent()它时,用React生成的标记替换现有标记.
在React的文档中搜索我发现了这个注释:
React.renderComponent()替换您传入的容器节点的内容.将来,可以将组件插入现有DOM节点而不覆盖现有子节点.
而且我不能React.renderComponentToString()用来生成标记服务器端,因为我的后端在PHP上运行...
是否有任何(即使是hackish)方式来实现当前版本(0.11.2)?
我想如果使用renderComponentToString()生成的标记可以实现,那么应该有一种模拟结果的方法吗?
谢谢你的建议!
我在与EaselJS合作时遇到了困难.基本上我想创建一个简单的网格并突出显示所选的实际元素:
var stageWidth = 800,
stageHeight = 600,
cell_size = 50,
w = 16,
h = 12,
n = w * h,
canvas,
stage,
background;
$(document).ready(function(){
canvas = $("#container")[0];
stage = new createjs.Stage(canvas);
var x_pos = 0,
y_pos = 0,
res = 0,
grid_el;
for(i=0;i<n;i++){
res = i%w;
if(i>0){
if(res===0){
x_pos = 0;
y_pos++;
} else {
x_pos++;
}
}
grid_el = new createjs.Shape();
grid_el.graphics.setStrokeStyle(2,"square").beginStroke("#000000");
grid_el.graphics.beginFill("#70FF85");
grid_el.graphics.rect(x_pos * cell_size,y_pos * cell_size,cell_size,cell_size);
grid_el.x_pos = x_pos * cell_size;
grid_el.y_pos = y_pos * …Run Code Online (Sandbox Code Playgroud) 我实际上正在为我的公司开发一个单页应用程序,它涉及不同用户角色的不同视图,以防止没有足够权限的人访问他们不应该看到的数据,或者执行他们无权执行的功能.
我在后端使用PHP和REST API,所以我觉得我在那里相当安全,但我对客户端安全性一无所知.
我正在考虑在我的main.js中以这种方式存储具有当前用户角色的App变量:
require(['jquery',
'underscore',
'backbone',
'marionette',
'app',
'routers/adminRouter',
'routers/userRouter',
], function($, _, Backbone, Marionette, App, AdminRouter, UserRouter){
App.vent.on("routing:started", function(){
Backbone.history.start();
});
App.addInitializer(function(){
if(userRole==="admin"){
App.Router = new AdminRouter;
} else {
App.Router = new UserRouter;
}
App.vent.trigger("routing:started");
});
App.addRegions({
content: "#main",
page: "#page",
dialogs: "#dialogs"
});
App.start();
App.vars = {};
App.vars.userRole = userRole;
Run Code Online (Sandbox Code Playgroud)
App.js只是:
define([
'underscore',
'backbone',
'marionette'
], function(_, Backbone){
var App = new Backbone.Marionette.Application();
return App;
});
Run Code Online (Sandbox Code Playgroud)
变量userRole只是一个全局变量,我在index.php页面上从我的服务器引导.这安全多少钱?有一种方法可以改变userRole页面加载的价值吗?或者App.vars.userRole在应用程序运行时进行更改?我无法App从控制台访问变量,但正如我所说,我对客户端编程非常新,我必须知道我是否可以依赖该变量的值.处理这种情况的最佳方法是什么?先感谢您.
我正在尝试使用内置的laravel的Ioc容器在Page模型中注入一个PageManager类,我有点迷失.
我想要实现的是这样的:
class Pages extends Eloquent {
public function __construct(PagesManagerInterface $manager, array $attributes = array())
{
parent::__construct($attributes);
$this->manager = new $manager;
}
public function saveToDisk()
{
$this->manager->writeToFile();
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误:
ErrorException:传递给Pages :: __ construct()的参数1必须是PagesManagerInterface的实例,没有给出.
我试着在app/start/global.php中添加它:
App::bind('Pages',function(){
return new Pages(new PagesManager);
});
Run Code Online (Sandbox Code Playgroud)
但似乎被框架忽略了,而且我也不知道如何将$ attribute数组插入到这个声明中.
我有点失落所以感谢任何帮助!
dependency-injection ioc-container inversion-of-control laravel
php ×5
backbone.js ×4
laravel ×4
javascript ×3
ajax ×1
canvas ×1
class ×1
client-side ×1
easeljs ×1
electron ×1
facade ×1
html5-canvas ×1
installer ×1
json ×1
knockout.js ×1
marionette ×1
node.js ×1
reactjs ×1
requirejs ×1
rest ×1
security ×1
session ×1
subdomain ×1
windows ×1
yii ×1