gpt4 book ai didi

json - 将模型保存为修改后的值

转载 作者:行者123 更新时间:2023-12-01 04:50:48 27 4
gpt4 key购买 nike

这是我现在正在使用的一段代码:

<select ng-model="rule.platforms" ng-options="platform for platform in platforms" 
name="platform" multiple required>
<option value="">-- platform --</option>
</select>

Angular 中多重选择的默认行为是将数组绑定(bind)到模型。例如:

rule.platforms = ["twitter", "google"]

但是,由于需要将其保存到数据库中,因此需要将所有值连接到一个字符串中。现在最清晰的解决方案似乎是在保存/更新之前解析值,但这样做会增加很多逻辑,因为有必要遍历所有数据并检查每条规则。

我真正想做的是有一种方法来改变绑定(bind)到模型的值最初是如何存储的,所以它会保存这种值而不是上面的方法:

rule.platforms = "twitter, google"

这可能吗?我一直在浏览 Angular 文档,但没有遇到过这样的事情。如果有人知道实现此行为的简单方法,请告诉我!

** 编辑 **

为了阐明我的具体用例,我想包括有问题的数据结构:

$scope.data = 
{
project: {
name: "",
topics_attributes: [
{
name: "",
feed_size: "",
topic_sources_attributes: [
{
platform: "",
keywords: "",
authors: ""
}
],
rules_attributes: [
{
name: "",
platforms: "",
conditional: "",
terms: ""
}
]
}
]
}
}

问题在于 rules_attributes.platforms 作为 rules_attributes 及其所有子项都是动态创建的。如果这是一个静态模型参数,那么 Mike 建议的解决方案将完美运行。不幸的是,模型的动态特性使其难以按照建议进行更改。

最佳答案

据我所知,实现此目的的最简单方法是使用临时范围变量来保存平台。然后,您可以使用 $watch 观察临时变量的变化,解析该值并使用字符串值更新您的 rule.platforms。

编辑:我想你会有类似于这种非常简化的方法的东西:
http://jsfiddle.net/oqwh5gs7/12/

function MyCtrl($scope) {
$scope.rule = {};
$scope.rule.platforms = ['google'];
$scope.tempPlatforms = [];
$scope.platforms = ['google', 'twitter'];

for(var i in $scope.rule.platforms) {
$scope.tempPlatforms[i] = $scope.rule.platforms[i];
}

$scope.$watch('tempPlatforms', function(newValue, oldValue) {
$scope.rule.platforms = newValue.join();
});
}

如果可用平台是固定的,那么更新正确的规则应该没有问题。您可以将选择放在指令中,并根据需要通过“=”或“&”绑定(bind)传递当前规则。如果可用平台根据当前规则发生变化,这可能会变得有点棘手,当然......

编辑: 我仍然不确定我是否正确理解了这个问题,但我用一种动态创建新规则的方法更新了我的 fiddle ,以演示我对你的问题的想象:http://jsfiddle.net/oqwh5gs7/16/

基本上我只为选择创建了一个指令并添加了一个 $scope.$watch('rule',...) 来反射(reflect)规则的动态变化。

关于json - 将模型保存为修改后的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26258509/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com