我对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值并使用它.但我不知道该怎么做.也许仅针对此组件禁止警告?那可能吗?也许还有其他事情可以做?
我想用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) 我正在研究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上搜索它,并且所有解决方案都有所不同,针对不同的问题,我没有得到简单的答案.你能在这里发一点光吗?
谢谢!
我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)
现在,在表单中呈现如下类别:

它应该呈现类别的名称,对吗?我在这里错过了什么?
我有一个带有NSToolbar的首选项窗口的Mac OS应用程序.
我还有一个自定义子视图和其他3个自定义视图,当用户单击其中一个选项时,这些视图将加载到第一个视图中.
到现在为止还挺好.现在我意识到加载窗口时默认情况下没有选择第一个项目.
我看到检查员没有选择,除了我使用的"可选".但没有"选中".我应该以编程方式进行吗?怎么样?
我想获得一个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脚本生成一个哈希并将其保存到文件中.
有时文件不存在或为空,所以我总是首先检查它的存在.然后我将旧值加载到我的哈希值并尝试再次保存.我一直在努力解决这个问题很长一段时间.这是一个示例:
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 ×2
associations ×1
checkbox ×1
cocoa ×1
deployment ×1
marshalling ×1
nginx ×1
node.js ×1
objective-c ×1
php ×1
rails-admin ×1
reactjs ×1
rvm ×1
ubuntu ×1
ubuntu-12.04 ×1
webserver ×1
xcode4.2 ×1