小编Apo*_*llo的帖子

在React中设置复选框"check"属性

我对React和复选框有一个非常烦人的问题.我正在使用的应用程序需要一个复选框列表,表示后端持久存在的设置.可以选择将设置恢复为原始状态.

起初,我创建了一个具有像设置图这样的对象的组件.每个设置都有一个键和一个布尔值.因此:

{
    bubbles: true,
    gregory: false
}
Run Code Online (Sandbox Code Playgroud)

表示为:

<input type="checkbox" value="bubbles" checked="checked" />
<input type="checkbox" value="gregory" />
Run Code Online (Sandbox Code Playgroud)

现在,似乎React对于复选框应该如何工作一无所知.我不想设置复选框的值,我想要"checked"属性.

但是,如果我尝试这样的事情:

<input
    type="checkbox"
    value={setting}
    checked={this.settings[setting]}
    onChange={this.onChangeAction.bind(this)}
/>
Run Code Online (Sandbox Code Playgroud)

我收到这个警告:

警告:AwesomeComponent正在更改要控制的类型复选框的不受控制的输入.输入元素不应从不受控制切换到受控制(或反之亦然).决定在组件的使用寿命期间使用受控或不受控制的输入元素.更多信息:[ 一些无用的文档页面我多次阅读但无济于事 ]

所以我决定创建另一个组件来包装每个单独的复选框,我得到了这个:

<input
    type="checkbox"
    checked={this.state.checked}
    onChange={this.onChangeAction.bind(this)}
/>
Run Code Online (Sandbox Code Playgroud)

现在这checked是一个直接出现在我所在州的财产.

这会产生相同的警告,所以我尝试使用defaultChecked:

<input
    type="checkbox"
    defaultChecked={this.state.checked}
    onChange={this.onChangeAction.bind(this)}
/>
Run Code Online (Sandbox Code Playgroud)

这使警告消失,但现在无法将checked值重置为默认值.所以我试着玩这个方法componentWillReceiveProps,这样我很确定我的状态是正确的,this.state.checked是正确的,组件再次呈现.

确实如此.但复选框保持原样.现在我离开了那个丑陋的警告,我正在使用checked.我如何解决这个问题,以便警告消失?

我想也许有一种强制重新渲染组件的方法,因此它捕获新defaultChecked值并使用它.但我不知道该怎么做.也许针对此组件禁止警告?那可能吗?也许还有其他事情可以做?

checkbox default-value reactjs

33
推荐指数
4
解决办法
5万
查看次数

Nginx在动态之前提供静态页面

我想用NGINX提供静态HTML文件,但是如果文件丢失,它应该加载PHP文件而PHP应该处理内容.

我一直在测试几种组合try_files,但我无法理解它.我有一个虚拟的PHP应用程序,如下所示:

./
../
dynamic.php
index.php
static/
static/static.html
Run Code Online (Sandbox Code Playgroud)

然后我在索引上有一个小的PHP代码,如下所示:

<?php

$path = $_SERVER['REQUEST_URI'];
$pattern = '/^\/(.*)\.html$/';

$matches = [];

$results = preg_match($pattern, $path, $matches);

if (count($matches) > 0) {
    if ($matches[1] == "dynamic") {
        require 'dynamic.php';
    } else {
        echo "Not found!";
    }
} else {
    echo "Index page!";
}
Run Code Online (Sandbox Code Playgroud)

浏览每个页面的结果应该是:

http://foo.bar/             - Loads index.php
http://foo.bar/static.html  - Loads static/static.html
http://foo.bar/dynamic.html - Loads index.php & PHP requires dynamic.php
http://foo.bar/baz.html     - Loads index.php with "not found" message
Run Code Online (Sandbox Code Playgroud)

这是我在NGINX配置文件中得到的:

server { …
Run Code Online (Sandbox Code Playgroud)

php nginx

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

将Node.js设置为$ PATH

我正在研究RoR,我正在设置这个虚拟机来"部署"RoR,我陷入了Node.js的安装.

我使用的是Ubuntu 12.04,我按照本指南的这一步操作:

http://railsapps.github.com/installing-rails.html

从Rails 3.1开始,Ubuntu Linux上需要一个JavaScript运行时(Mac OS X或Windows不需要它).对于Linux Ubuntu上的开发,最好安装Node.js服务器端JavaScript环境:

$ sudo apt-get install nodejs

并将其设置在$ PATH中.

这是什么意思,"设置为我的$ PATH"?

在过去的几个小时里我一直在google上搜索它,并且所有解决方案都有所不同,针对不同的问题,我没有得到简单的答案.你能在这里发一点光吗?

谢谢!

deployment ubuntu webserver ruby-on-rails node.js

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

使用rails_admin显示belongs_to关联的下拉列表

rails_admin用来管理rails应用程序中的数据.

我有这门课:

class Activity < ActiveRecord::Base
  attr_accessible :content, :title, :category_id
  belongs_to :category, :inverse_of => :activities
end
Run Code Online (Sandbox Code Playgroud)

另一端是:

class Category < ActiveRecord::Base
  attr_accessible :title, :category_id, :activities_ids
  has_many :activities, :inverse_of => :category
end
Run Code Online (Sandbox Code Playgroud)

我的Activity的rails_admin初始化程序如下所示:

config.model Activity do
  edit do
    field :title
    field :content, :text do
      bootstrap_wysihtml5 true
    end
    field :category
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,在表单中呈现如下类别:

遗失的田野

它应该呈现类别的名称,对吗?我在这里错过了什么?

ruby-on-rails associations model-associations rails-admin

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

NSToolbar:如何使用所选项目进行初始化?

我有一个带有NSToolbar的首选项窗口的Mac OS应用程序.

我还有一个自定义子视图和其他3个自定义视图,当用户单击其中一个选项时,这些视图将加载到第一个视图中.

到现在为止还挺好.现在我意识到加载窗口时默认情况下没有选择第一个项目.

我看到检查员没有选择,除了我使用的"可选".但没有"选中".我应该以编程方式进行吗?怎么样?

cocoa objective-c osx-snow-leopard xcode4.2

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

rvmsudo命令无法正常工作

我想获得一个RoR环境的更新版本.

我正在运行Ubuntu 12.04,我有这个设置:

$ groups
user adm cdrom sudo dip plugdev lpadmin sambashare rvm
$ rvm -v
rvm 1.17.2 (stable) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]
$ rvm list

rvm rubies

=* ruby-1.9.3-p327 [ x86_64 ]

# => - current
# =* - current && default
#  * - default
$ ruby -v
ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-linux]
$ gem -v
1.8.24
$ rails -v
Rails 3.2.9
Run Code Online (Sandbox Code Playgroud)

一切正常.但是现在我正在尝试安装Thin,我发现我的rvmsudo命令几乎没用:

$ rvmsudo echo 1
1
$ rvmsudo ruby …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails rvm ubuntu-12.04

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

Marshal无法使用默认proc(TypeError)转储哈希

我有这个ruby脚本生成一个哈希并将其保存到文件中.

有时文件不存在或为空,所以我总是首先检查它的存在.然后我将旧值加载到我的哈希值并尝试再次保存.我一直在努力解决这个问题很长一段时间.这是一个示例:

newAppName = ARGV[0]
newApp = Hash.new
newApp["url"] = ARGV[1]
newApp["ports"] = ARGV[2].to_i

apps = Hash.new { |h, k| h[k] = Hash.new }
# apps["test"] = {"url" => "www.test.com", "ports" => 3 }

appsFile = '/home/test/data/apps'

if File.exists?(appsFile)
  apps = Marshal.load File.read(appsFile)
else
  puts "Inserting first app into list..."
end

apps[newAppName] = newApp

serialisedApps = Marshal.dump(apps) # This line is where I get the error

File.open(appsFile, 'w') {|f| f.write(serialisedApps) }
Run Code Online (Sandbox Code Playgroud)

现在我收到这个错误:

script.rb:53:in `dump': can't dump hash with default proc …
Run Code Online (Sandbox Code Playgroud)

ruby marshalling

4
推荐指数
1
解决办法
2832
查看次数